hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/fs/nfs/flexfilelayout/flexfilelayout.h
....@@ -81,8 +81,8 @@
8181 u32 fh_versions_cnt;
8282 struct nfs_fh *fh_versions;
8383 nfs4_stateid stateid;
84
- struct rpc_cred __rcu *ro_cred;
85
- struct rpc_cred __rcu *rw_cred;
84
+ const struct cred __rcu *ro_cred;
85
+ const struct cred __rcu *rw_cred;
8686 refcount_t ref;
8787 spinlock_t lock;
8888 unsigned long flags;
....@@ -99,7 +99,7 @@
9999 u64 stripe_unit;
100100 u32 flags;
101101 u32 mirror_array_cnt;
102
- struct nfs4_ff_layout_mirror **mirror_array;
102
+ struct nfs4_ff_layout_mirror *mirror_array[];
103103 };
104104
105105 struct nfs4_flexfile_layout {
....@@ -180,28 +180,10 @@
180180 return FF_LAYOUT_LSEG(lseg)->flags & FF_FLAGS_NO_READ_IO;
181181 }
182182
183
-static inline bool
184
-ff_layout_test_devid_unavailable(struct nfs4_deviceid_node *node)
185
-{
186
- /*
187
- * Flexfiles should never mark a DS unavailable, but if it does
188
- * print a (ratelimited) warning as this can affect performance.
189
- */
190
- if (nfs4_test_deviceid_unavailable(node)) {
191
- u32 *p = (u32 *)node->deviceid.data;
192
-
193
- pr_warn_ratelimited("NFS: flexfiles layout referencing an "
194
- "unavailable device [%x%x%x%x]\n",
195
- p[0], p[1], p[2], p[3]);
196
- return true;
197
- }
198
- return false;
199
-}
200
-
201183 static inline int
202
-nfs4_ff_layout_ds_version(struct pnfs_layout_segment *lseg, u32 ds_idx)
184
+nfs4_ff_layout_ds_version(const struct nfs4_ff_layout_mirror *mirror)
203185 {
204
- return FF_LAYOUT_COMP(lseg, ds_idx)->mirror_ds->ds_versions[0].version;
186
+ return mirror->mirror_ds->ds_versions[0].version;
205187 }
206188
207189 struct nfs4_ff_layout_ds *
....@@ -213,6 +195,7 @@
213195 struct nfs4_ff_layout_mirror *mirror, u64 offset,
214196 u64 length, int status, enum nfs_opnum4 opnum,
215197 gfp_t gfp_flags);
198
+void ff_layout_send_layouterror(struct pnfs_layout_segment *lseg);
216199 int ff_layout_encode_ds_ioerr(struct xdr_stream *xdr, const struct list_head *head);
217200 void ff_layout_free_ds_ioerr(struct list_head *head);
218201 unsigned int ff_layout_fetch_ds_ioerr(struct pnfs_layout_hdr *lo,
....@@ -220,23 +203,23 @@
220203 struct list_head *head,
221204 unsigned int maxnum);
222205 struct nfs_fh *
223
-nfs4_ff_layout_select_ds_fh(struct pnfs_layout_segment *lseg, u32 mirror_idx);
224
-int
225
-nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg,
226
- u32 mirror_idx,
227
- nfs4_stateid *stateid);
206
+nfs4_ff_layout_select_ds_fh(struct nfs4_ff_layout_mirror *mirror);
207
+void
208
+nfs4_ff_layout_select_ds_stateid(const struct nfs4_ff_layout_mirror *mirror,
209
+ nfs4_stateid *stateid);
228210
229211 struct nfs4_pnfs_ds *
230
-nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx,
212
+nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg,
213
+ struct nfs4_ff_layout_mirror *mirror,
231214 bool fail_return);
232215
233216 struct rpc_clnt *
234
-nfs4_ff_find_or_create_ds_client(struct pnfs_layout_segment *lseg,
235
- u32 ds_idx,
217
+nfs4_ff_find_or_create_ds_client(struct nfs4_ff_layout_mirror *mirror,
236218 struct nfs_client *ds_clp,
237219 struct inode *inode);
238
-struct rpc_cred *ff_layout_get_ds_cred(struct pnfs_layout_segment *lseg,
239
- u32 ds_idx, struct rpc_cred *mdscred);
220
+const struct cred *ff_layout_get_ds_cred(struct nfs4_ff_layout_mirror *mirror,
221
+ const struct pnfs_layout_range *range,
222
+ const struct cred *mdscred);
240223 bool ff_layout_avoid_mds_available_ds(struct pnfs_layout_segment *lseg);
241224 bool ff_layout_avoid_read_on_rw(struct pnfs_layout_segment *lseg);
242225