| .. | .. |
|---|
| 66 | 66 | struct pnfs_layout_segment { |
|---|
| 67 | 67 | struct list_head pls_list; |
|---|
| 68 | 68 | struct list_head pls_lc_list; |
|---|
| 69 | + struct list_head pls_commits; |
|---|
| 69 | 70 | struct pnfs_layout_range pls_range; |
|---|
| 70 | 71 | refcount_t pls_refcount; |
|---|
| 71 | 72 | u32 pls_seq; |
|---|
| .. | .. |
|---|
| 79 | 80 | PNFS_TRY_AGAIN = 2, |
|---|
| 80 | 81 | }; |
|---|
| 81 | 82 | |
|---|
| 83 | +/* error codes for internal use */ |
|---|
| 84 | +#define NFS4ERR_RESET_TO_MDS 12001 |
|---|
| 85 | +#define NFS4ERR_RESET_TO_PNFS 12002 |
|---|
| 86 | + |
|---|
| 82 | 87 | #ifdef CONFIG_NFS_V4_1 |
|---|
| 83 | 88 | |
|---|
| 84 | 89 | #define LAYOUT_NFSV4_1_MODULE_PREFIX "nfs-layouttype4" |
|---|
| .. | .. |
|---|
| 91 | 96 | #define NFS4_DEF_DS_RETRANS 5 |
|---|
| 92 | 97 | #define PNFS_DEVICE_RETRY_TIMEOUT (120*HZ) |
|---|
| 93 | 98 | |
|---|
| 94 | | -/* error codes for internal use */ |
|---|
| 95 | | -#define NFS4ERR_RESET_TO_MDS 12001 |
|---|
| 96 | | -#define NFS4ERR_RESET_TO_PNFS 12002 |
|---|
| 97 | | - |
|---|
| 98 | 99 | enum { |
|---|
| 99 | 100 | NFS_LAYOUT_RO_FAILED = 0, /* get ro layout failed stop trying */ |
|---|
| 100 | 101 | NFS_LAYOUT_RW_FAILED, /* get rw layout failed stop trying */ |
|---|
| .. | .. |
|---|
| 105 | 106 | NFS_LAYOUT_INVALID_STID, /* layout stateid id is invalid */ |
|---|
| 106 | 107 | NFS_LAYOUT_FIRST_LAYOUTGET, /* Serialize first layoutget */ |
|---|
| 107 | 108 | NFS_LAYOUT_INODE_FREEING, /* The inode is being freed */ |
|---|
| 109 | + NFS_LAYOUT_HASHED, /* The layout visible */ |
|---|
| 110 | + NFS_LAYOUT_DRAIN, |
|---|
| 108 | 111 | }; |
|---|
| 109 | 112 | |
|---|
| 110 | 113 | enum layoutdriver_policy_flags { |
|---|
| .. | .. |
|---|
| 126 | 129 | struct module *owner; |
|---|
| 127 | 130 | unsigned flags; |
|---|
| 128 | 131 | unsigned max_deviceinfo_size; |
|---|
| 132 | + unsigned max_layoutget_response; |
|---|
| 129 | 133 | |
|---|
| 130 | 134 | int (*set_layoutdriver) (struct nfs_server *, const struct nfs_fh *); |
|---|
| 131 | 135 | int (*clear_layoutdriver) (struct nfs_server *); |
|---|
| .. | .. |
|---|
| 147 | 151 | const struct nfs_pageio_ops *pg_write_ops; |
|---|
| 148 | 152 | |
|---|
| 149 | 153 | struct pnfs_ds_commit_info *(*get_ds_info) (struct inode *inode); |
|---|
| 150 | | - void (*mark_request_commit) (struct nfs_page *req, |
|---|
| 151 | | - struct pnfs_layout_segment *lseg, |
|---|
| 152 | | - struct nfs_commit_info *cinfo, |
|---|
| 153 | | - u32 ds_commit_idx); |
|---|
| 154 | | - void (*clear_request_commit) (struct nfs_page *req, |
|---|
| 155 | | - struct nfs_commit_info *cinfo); |
|---|
| 156 | | - int (*scan_commit_lists) (struct nfs_commit_info *cinfo, |
|---|
| 157 | | - int max); |
|---|
| 158 | | - void (*recover_commit_reqs) (struct list_head *list, |
|---|
| 159 | | - struct nfs_commit_info *cinfo); |
|---|
| 160 | | - struct nfs_page * (*search_commit_reqs)(struct nfs_commit_info *cinfo, |
|---|
| 161 | | - struct page *page); |
|---|
| 162 | | - int (*commit_pagelist)(struct inode *inode, |
|---|
| 163 | | - struct list_head *mds_pages, |
|---|
| 164 | | - int how, |
|---|
| 165 | | - struct nfs_commit_info *cinfo); |
|---|
| 166 | 154 | |
|---|
| 167 | 155 | int (*sync)(struct inode *inode, bool datasync); |
|---|
| 168 | 156 | |
|---|
| .. | .. |
|---|
| 185 | 173 | int (*prepare_layoutstats) (struct nfs42_layoutstat_args *args); |
|---|
| 186 | 174 | }; |
|---|
| 187 | 175 | |
|---|
| 176 | +struct pnfs_commit_ops { |
|---|
| 177 | + void (*setup_ds_info)(struct pnfs_ds_commit_info *, |
|---|
| 178 | + struct pnfs_layout_segment *); |
|---|
| 179 | + void (*release_ds_info)(struct pnfs_ds_commit_info *, |
|---|
| 180 | + struct inode *inode); |
|---|
| 181 | + int (*commit_pagelist)(struct inode *inode, |
|---|
| 182 | + struct list_head *mds_pages, |
|---|
| 183 | + int how, |
|---|
| 184 | + struct nfs_commit_info *cinfo); |
|---|
| 185 | + void (*mark_request_commit) (struct nfs_page *req, |
|---|
| 186 | + struct pnfs_layout_segment *lseg, |
|---|
| 187 | + struct nfs_commit_info *cinfo, |
|---|
| 188 | + u32 ds_commit_idx); |
|---|
| 189 | + void (*clear_request_commit) (struct nfs_page *req, |
|---|
| 190 | + struct nfs_commit_info *cinfo); |
|---|
| 191 | + int (*scan_commit_lists) (struct nfs_commit_info *cinfo, |
|---|
| 192 | + int max); |
|---|
| 193 | + void (*recover_commit_reqs) (struct list_head *list, |
|---|
| 194 | + struct nfs_commit_info *cinfo); |
|---|
| 195 | + struct nfs_page * (*search_commit_reqs)(struct nfs_commit_info *cinfo, |
|---|
| 196 | + struct page *page); |
|---|
| 197 | +}; |
|---|
| 198 | + |
|---|
| 188 | 199 | struct pnfs_layout_hdr { |
|---|
| 189 | 200 | refcount_t plh_refcount; |
|---|
| 190 | 201 | atomic_t plh_outstanding; /* number of RPCs out */ |
|---|
| .. | .. |
|---|
| 200 | 211 | u32 plh_return_seq; |
|---|
| 201 | 212 | enum pnfs_iomode plh_return_iomode; |
|---|
| 202 | 213 | loff_t plh_lwb; /* last write byte for layoutcommit */ |
|---|
| 203 | | - struct rpc_cred *plh_lc_cred; /* layoutcommit cred */ |
|---|
| 214 | + const struct cred *plh_lc_cred; /* layoutcommit cred */ |
|---|
| 204 | 215 | struct inode *plh_inode; |
|---|
| 216 | + struct rcu_head plh_rcu; |
|---|
| 205 | 217 | }; |
|---|
| 206 | 218 | |
|---|
| 207 | 219 | struct pnfs_device { |
|---|
| .. | .. |
|---|
| 225 | 237 | |
|---|
| 226 | 238 | extern int pnfs_register_layoutdriver(struct pnfs_layoutdriver_type *); |
|---|
| 227 | 239 | extern void pnfs_unregister_layoutdriver(struct pnfs_layoutdriver_type *); |
|---|
| 240 | +extern const struct pnfs_layoutdriver_type *pnfs_find_layoutdriver(u32 id); |
|---|
| 241 | +extern void pnfs_put_layoutdriver(const struct pnfs_layoutdriver_type *ld); |
|---|
| 228 | 242 | |
|---|
| 229 | 243 | /* nfs4proc.c */ |
|---|
| 230 | 244 | extern size_t max_response_pages(struct nfs_server *server); |
|---|
| 231 | 245 | extern int nfs4_proc_getdeviceinfo(struct nfs_server *server, |
|---|
| 232 | 246 | struct pnfs_device *dev, |
|---|
| 233 | | - struct rpc_cred *cred); |
|---|
| 247 | + const struct cred *cred); |
|---|
| 234 | 248 | extern struct pnfs_layout_segment* nfs4_proc_layoutget(struct nfs4_layoutget *lgp, long *timeout); |
|---|
| 235 | 249 | extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp, bool sync); |
|---|
| 236 | 250 | |
|---|
| .. | .. |
|---|
| 241 | 255 | void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, struct nfs_fsinfo *); |
|---|
| 242 | 256 | void unset_pnfs_layoutdriver(struct nfs_server *); |
|---|
| 243 | 257 | void pnfs_generic_pg_check_layout(struct nfs_pageio_descriptor *pgio); |
|---|
| 258 | +void pnfs_generic_pg_check_range(struct nfs_pageio_descriptor *pgio, struct nfs_page *req); |
|---|
| 244 | 259 | void pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *, struct nfs_page *); |
|---|
| 245 | 260 | int pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc); |
|---|
| 246 | 261 | void pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio, |
|---|
| .. | .. |
|---|
| 261 | 276 | bool is_recall); |
|---|
| 262 | 277 | int pnfs_destroy_layouts_byclid(struct nfs_client *clp, |
|---|
| 263 | 278 | bool is_recall); |
|---|
| 264 | | -bool nfs4_layoutreturn_refresh_stateid(nfs4_stateid *dst, |
|---|
| 279 | +bool nfs4_layout_refresh_old_stateid(nfs4_stateid *dst, |
|---|
| 265 | 280 | struct pnfs_layout_range *dst_range, |
|---|
| 266 | 281 | struct inode *inode); |
|---|
| 267 | 282 | void pnfs_put_layout_hdr(struct pnfs_layout_hdr *lo); |
|---|
| 268 | 283 | void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, |
|---|
| 269 | 284 | const nfs4_stateid *new, |
|---|
| 285 | + const struct cred *cred, |
|---|
| 270 | 286 | bool update_barrier); |
|---|
| 271 | 287 | int pnfs_mark_matching_lsegs_invalid(struct pnfs_layout_hdr *lo, |
|---|
| 272 | 288 | struct list_head *tmp_list, |
|---|
| .. | .. |
|---|
| 281 | 297 | bool pnfs_roc(struct inode *ino, |
|---|
| 282 | 298 | struct nfs4_layoutreturn_args *args, |
|---|
| 283 | 299 | struct nfs4_layoutreturn_res *res, |
|---|
| 284 | | - const struct rpc_cred *cred); |
|---|
| 300 | + const struct cred *cred); |
|---|
| 301 | +int pnfs_roc_done(struct rpc_task *task, struct nfs4_layoutreturn_args **argpp, |
|---|
| 302 | + struct nfs4_layoutreturn_res **respp, int *ret); |
|---|
| 285 | 303 | void pnfs_roc_release(struct nfs4_layoutreturn_args *args, |
|---|
| 286 | 304 | struct nfs4_layoutreturn_res *res, |
|---|
| 287 | 305 | int ret); |
|---|
| .. | .. |
|---|
| 295 | 313 | int pnfs_commit_and_return_layout(struct inode *); |
|---|
| 296 | 314 | void pnfs_ld_write_done(struct nfs_pgio_header *); |
|---|
| 297 | 315 | void pnfs_ld_read_done(struct nfs_pgio_header *); |
|---|
| 298 | | -void pnfs_read_resend_pnfs(struct nfs_pgio_header *); |
|---|
| 316 | +void pnfs_read_resend_pnfs(struct nfs_pgio_header *, unsigned int mirror_idx); |
|---|
| 299 | 317 | struct pnfs_layout_segment *pnfs_update_layout(struct inode *ino, |
|---|
| 300 | 318 | struct nfs_open_context *ctx, |
|---|
| 301 | 319 | loff_t pos, |
|---|
| .. | .. |
|---|
| 322 | 340 | struct nfs4_threshold *pnfs_mdsthreshold_alloc(void); |
|---|
| 323 | 341 | void pnfs_error_mark_layout_for_return(struct inode *inode, |
|---|
| 324 | 342 | struct pnfs_layout_segment *lseg); |
|---|
| 343 | +void pnfs_layout_return_unused_byclid(struct nfs_client *clp, |
|---|
| 344 | + enum pnfs_iomode iomode); |
|---|
| 345 | + |
|---|
| 325 | 346 | /* nfs4_deviceid_flags */ |
|---|
| 326 | 347 | enum { |
|---|
| 327 | 348 | NFS_DEVICEID_INVALID = 0, /* set when MDS clientid recalled */ |
|---|
| .. | .. |
|---|
| 344 | 365 | |
|---|
| 345 | 366 | struct nfs4_deviceid_node * |
|---|
| 346 | 367 | nfs4_find_get_deviceid(struct nfs_server *server, |
|---|
| 347 | | - const struct nfs4_deviceid *id, struct rpc_cred *cred, |
|---|
| 368 | + const struct nfs4_deviceid *id, const struct cred *cred, |
|---|
| 348 | 369 | gfp_t gfp_mask); |
|---|
| 349 | 370 | void nfs4_delete_deviceid(const struct pnfs_layoutdriver_type *, const struct nfs_client *, const struct nfs4_deviceid *); |
|---|
| 350 | 371 | void nfs4_init_deviceid_node(struct nfs4_deviceid_node *, struct nfs_server *, |
|---|
| 351 | 372 | const struct nfs4_deviceid *); |
|---|
| 352 | 373 | bool nfs4_put_deviceid_node(struct nfs4_deviceid_node *); |
|---|
| 374 | +void nfs4_mark_deviceid_available(struct nfs4_deviceid_node *node); |
|---|
| 353 | 375 | void nfs4_mark_deviceid_unavailable(struct nfs4_deviceid_node *node); |
|---|
| 354 | 376 | bool nfs4_test_deviceid_unavailable(struct nfs4_deviceid_node *node); |
|---|
| 355 | 377 | void nfs4_deviceid_purge_client(const struct nfs_client *); |
|---|
| 356 | 378 | |
|---|
| 357 | 379 | /* pnfs_nfs.c */ |
|---|
| 380 | +struct pnfs_commit_array *pnfs_alloc_commit_array(size_t n, gfp_t gfp_flags); |
|---|
| 381 | +void pnfs_free_commit_array(struct pnfs_commit_array *p); |
|---|
| 382 | +struct pnfs_commit_array *pnfs_add_commit_array(struct pnfs_ds_commit_info *, |
|---|
| 383 | + struct pnfs_commit_array *, |
|---|
| 384 | + struct pnfs_layout_segment *); |
|---|
| 385 | + |
|---|
| 386 | +void pnfs_generic_ds_cinfo_release_lseg(struct pnfs_ds_commit_info *fl_cinfo, |
|---|
| 387 | + struct pnfs_layout_segment *lseg); |
|---|
| 388 | +void pnfs_generic_ds_cinfo_destroy(struct pnfs_ds_commit_info *fl_cinfo); |
|---|
| 389 | + |
|---|
| 358 | 390 | void pnfs_generic_clear_request_commit(struct nfs_page *req, |
|---|
| 359 | 391 | struct nfs_commit_info *cinfo); |
|---|
| 360 | 392 | void pnfs_generic_commit_release(void *calldata); |
|---|
| .. | .. |
|---|
| 362 | 394 | void pnfs_generic_rw_release(void *data); |
|---|
| 363 | 395 | void pnfs_generic_recover_commit_reqs(struct list_head *dst, |
|---|
| 364 | 396 | struct nfs_commit_info *cinfo); |
|---|
| 397 | +struct nfs_page *pnfs_generic_search_commit_reqs(struct nfs_commit_info *cinfo, |
|---|
| 398 | + struct page *page); |
|---|
| 365 | 399 | int pnfs_generic_commit_pagelist(struct inode *inode, |
|---|
| 366 | 400 | struct list_head *mds_pages, |
|---|
| 367 | 401 | int how, |
|---|
| .. | .. |
|---|
| 433 | 467 | pnfs_commit_list(struct inode *inode, struct list_head *mds_pages, int how, |
|---|
| 434 | 468 | struct nfs_commit_info *cinfo) |
|---|
| 435 | 469 | { |
|---|
| 436 | | - if (cinfo->ds == NULL || cinfo->ds->ncommitting == 0) |
|---|
| 470 | + struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; |
|---|
| 471 | + |
|---|
| 472 | + if (fl_cinfo == NULL || fl_cinfo->ncommitting == 0) |
|---|
| 437 | 473 | return PNFS_NOT_ATTEMPTED; |
|---|
| 438 | | - return NFS_SERVER(inode)->pnfs_curr_ld->commit_pagelist(inode, mds_pages, how, cinfo); |
|---|
| 474 | + return fl_cinfo->ops->commit_pagelist(inode, mds_pages, how, cinfo); |
|---|
| 439 | 475 | } |
|---|
| 440 | 476 | |
|---|
| 441 | 477 | static inline struct pnfs_ds_commit_info * |
|---|
| .. | .. |
|---|
| 449 | 485 | } |
|---|
| 450 | 486 | |
|---|
| 451 | 487 | static inline void |
|---|
| 488 | +pnfs_init_ds_commit_info_ops(struct pnfs_ds_commit_info *fl_cinfo, struct inode *inode) |
|---|
| 489 | +{ |
|---|
| 490 | + struct pnfs_ds_commit_info *inode_cinfo = pnfs_get_ds_info(inode); |
|---|
| 491 | + if (inode_cinfo != NULL) |
|---|
| 492 | + fl_cinfo->ops = inode_cinfo->ops; |
|---|
| 493 | +} |
|---|
| 494 | + |
|---|
| 495 | +static inline void |
|---|
| 496 | +pnfs_init_ds_commit_info(struct pnfs_ds_commit_info *fl_cinfo) |
|---|
| 497 | +{ |
|---|
| 498 | + INIT_LIST_HEAD(&fl_cinfo->commits); |
|---|
| 499 | + fl_cinfo->ops = NULL; |
|---|
| 500 | +} |
|---|
| 501 | + |
|---|
| 502 | +static inline void |
|---|
| 503 | +pnfs_release_ds_info(struct pnfs_ds_commit_info *fl_cinfo, struct inode *inode) |
|---|
| 504 | +{ |
|---|
| 505 | + if (fl_cinfo->ops != NULL && fl_cinfo->ops->release_ds_info != NULL) |
|---|
| 506 | + fl_cinfo->ops->release_ds_info(fl_cinfo, inode); |
|---|
| 507 | +} |
|---|
| 508 | + |
|---|
| 509 | +static inline void |
|---|
| 452 | 510 | pnfs_generic_mark_devid_invalid(struct nfs4_deviceid_node *node) |
|---|
| 453 | 511 | { |
|---|
| 454 | 512 | set_bit(NFS_DEVICEID_INVALID, &node->flags); |
|---|
| .. | .. |
|---|
| 458 | 516 | pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg, |
|---|
| 459 | 517 | struct nfs_commit_info *cinfo, u32 ds_commit_idx) |
|---|
| 460 | 518 | { |
|---|
| 461 | | - struct inode *inode = d_inode(req->wb_context->dentry); |
|---|
| 462 | | - struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld; |
|---|
| 519 | + struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; |
|---|
| 463 | 520 | |
|---|
| 464 | | - if (lseg == NULL || ld->mark_request_commit == NULL) |
|---|
| 521 | + if (!lseg || !fl_cinfo->ops || !fl_cinfo->ops->mark_request_commit) |
|---|
| 465 | 522 | return false; |
|---|
| 466 | | - ld->mark_request_commit(req, lseg, cinfo, ds_commit_idx); |
|---|
| 523 | + fl_cinfo->ops->mark_request_commit(req, lseg, cinfo, ds_commit_idx); |
|---|
| 467 | 524 | return true; |
|---|
| 468 | 525 | } |
|---|
| 469 | 526 | |
|---|
| 470 | 527 | static inline bool |
|---|
| 471 | 528 | pnfs_clear_request_commit(struct nfs_page *req, struct nfs_commit_info *cinfo) |
|---|
| 472 | 529 | { |
|---|
| 473 | | - struct inode *inode = d_inode(req->wb_context->dentry); |
|---|
| 474 | | - struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld; |
|---|
| 530 | + struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; |
|---|
| 475 | 531 | |
|---|
| 476 | | - if (ld == NULL || ld->clear_request_commit == NULL) |
|---|
| 532 | + if (!fl_cinfo || !fl_cinfo->ops || !fl_cinfo->ops->clear_request_commit) |
|---|
| 477 | 533 | return false; |
|---|
| 478 | | - ld->clear_request_commit(req, cinfo); |
|---|
| 534 | + fl_cinfo->ops->clear_request_commit(req, cinfo); |
|---|
| 479 | 535 | return true; |
|---|
| 480 | 536 | } |
|---|
| 481 | 537 | |
|---|
| .. | .. |
|---|
| 483 | 539 | pnfs_scan_commit_lists(struct inode *inode, struct nfs_commit_info *cinfo, |
|---|
| 484 | 540 | int max) |
|---|
| 485 | 541 | { |
|---|
| 486 | | - if (cinfo->ds == NULL || cinfo->ds->nwritten == 0) |
|---|
| 542 | + struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; |
|---|
| 543 | + |
|---|
| 544 | + if (!fl_cinfo || fl_cinfo->nwritten == 0) |
|---|
| 487 | 545 | return 0; |
|---|
| 488 | | - else |
|---|
| 489 | | - return NFS_SERVER(inode)->pnfs_curr_ld->scan_commit_lists(cinfo, max); |
|---|
| 546 | + return fl_cinfo->ops->scan_commit_lists(cinfo, max); |
|---|
| 547 | +} |
|---|
| 548 | + |
|---|
| 549 | +static inline void |
|---|
| 550 | +pnfs_recover_commit_reqs(struct list_head *head, struct nfs_commit_info *cinfo) |
|---|
| 551 | +{ |
|---|
| 552 | + struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; |
|---|
| 553 | + |
|---|
| 554 | + if (fl_cinfo && fl_cinfo->nwritten != 0) |
|---|
| 555 | + fl_cinfo->ops->recover_commit_reqs(head, cinfo); |
|---|
| 490 | 556 | } |
|---|
| 491 | 557 | |
|---|
| 492 | 558 | static inline struct nfs_page * |
|---|
| 493 | 559 | pnfs_search_commit_reqs(struct inode *inode, struct nfs_commit_info *cinfo, |
|---|
| 494 | 560 | struct page *page) |
|---|
| 495 | 561 | { |
|---|
| 496 | | - struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld; |
|---|
| 562 | + struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; |
|---|
| 497 | 563 | |
|---|
| 498 | | - if (ld == NULL || ld->search_commit_reqs == NULL) |
|---|
| 564 | + if (!fl_cinfo->ops || !fl_cinfo->ops->search_commit_reqs) |
|---|
| 499 | 565 | return NULL; |
|---|
| 500 | | - return ld->search_commit_reqs(cinfo, page); |
|---|
| 566 | + return fl_cinfo->ops->search_commit_reqs(cinfo, page); |
|---|
| 501 | 567 | } |
|---|
| 502 | 568 | |
|---|
| 503 | 569 | /* Should the pNFS client commit and return the layout upon a setattr */ |
|---|
| .. | .. |
|---|
| 699 | 765 | pnfs_roc(struct inode *ino, |
|---|
| 700 | 766 | struct nfs4_layoutreturn_args *args, |
|---|
| 701 | 767 | struct nfs4_layoutreturn_res *res, |
|---|
| 702 | | - const struct rpc_cred *cred) |
|---|
| 768 | + const struct cred *cred) |
|---|
| 703 | 769 | { |
|---|
| 704 | 770 | return false; |
|---|
| 771 | +} |
|---|
| 772 | + |
|---|
| 773 | +static inline int |
|---|
| 774 | +pnfs_roc_done(struct rpc_task *task, |
|---|
| 775 | + struct nfs4_layoutreturn_args **argpp, |
|---|
| 776 | + struct nfs4_layoutreturn_res **respp, |
|---|
| 777 | + int *ret) |
|---|
| 778 | +{ |
|---|
| 779 | + return 0; |
|---|
| 705 | 780 | } |
|---|
| 706 | 781 | |
|---|
| 707 | 782 | static inline void |
|---|
| .. | .. |
|---|
| 740 | 815 | return NULL; |
|---|
| 741 | 816 | } |
|---|
| 742 | 817 | |
|---|
| 818 | +static inline void |
|---|
| 819 | +pnfs_init_ds_commit_info_ops(struct pnfs_ds_commit_info *fl_cinfo, struct inode *inode) |
|---|
| 820 | +{ |
|---|
| 821 | +} |
|---|
| 822 | + |
|---|
| 823 | +static inline void |
|---|
| 824 | +pnfs_init_ds_commit_info(struct pnfs_ds_commit_info *fl_cinfo) |
|---|
| 825 | +{ |
|---|
| 826 | +} |
|---|
| 827 | + |
|---|
| 828 | +static inline void |
|---|
| 829 | +pnfs_release_ds_info(struct pnfs_ds_commit_info *fl_cinfo, struct inode *inode) |
|---|
| 830 | +{ |
|---|
| 831 | +} |
|---|
| 832 | + |
|---|
| 743 | 833 | static inline bool |
|---|
| 744 | 834 | pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg, |
|---|
| 745 | 835 | struct nfs_commit_info *cinfo, u32 ds_commit_idx) |
|---|
| .. | .. |
|---|
| 758 | 848 | int max) |
|---|
| 759 | 849 | { |
|---|
| 760 | 850 | return 0; |
|---|
| 851 | +} |
|---|
| 852 | + |
|---|
| 853 | +static inline void |
|---|
| 854 | +pnfs_recover_commit_reqs(struct list_head *head, struct nfs_commit_info *cinfo) |
|---|
| 855 | +{ |
|---|
| 761 | 856 | } |
|---|
| 762 | 857 | |
|---|
| 763 | 858 | static inline struct nfs_page * |
|---|
| .. | .. |
|---|
| 788 | 883 | { |
|---|
| 789 | 884 | } |
|---|
| 790 | 885 | |
|---|
| 791 | | -static inline bool nfs4_layoutreturn_refresh_stateid(nfs4_stateid *dst, |
|---|
| 886 | +static inline bool nfs4_layout_refresh_old_stateid(nfs4_stateid *dst, |
|---|
| 792 | 887 | struct pnfs_layout_range *dst_range, |
|---|
| 793 | 888 | struct inode *inode) |
|---|
| 794 | 889 | { |
|---|