.. | .. |
---|
46 | 46 | #define CURRENT_STATE_ID_FLAG (1<<0) |
---|
47 | 47 | #define SAVED_STATE_ID_FLAG (1<<1) |
---|
48 | 48 | |
---|
49 | | -#define SET_STATE_ID(c, f) ((c)->sid_flags |= (f)) |
---|
50 | | -#define HAS_STATE_ID(c, f) ((c)->sid_flags & (f)) |
---|
51 | | -#define CLEAR_STATE_ID(c, f) ((c)->sid_flags &= ~(f)) |
---|
| 49 | +#define SET_CSTATE_FLAG(c, f) ((c)->sid_flags |= (f)) |
---|
| 50 | +#define HAS_CSTATE_FLAG(c, f) ((c)->sid_flags & (f)) |
---|
| 51 | +#define CLEAR_CSTATE_FLAG(c, f) ((c)->sid_flags &= ~(f)) |
---|
52 | 52 | |
---|
53 | 53 | struct nfsd4_compound_state { |
---|
54 | 54 | struct svc_fh current_fh; |
---|
.. | .. |
---|
221 | 221 | struct nfsd4_putfh { |
---|
222 | 222 | u32 pf_fhlen; /* request */ |
---|
223 | 223 | char *pf_fhval; /* request */ |
---|
| 224 | + bool no_verify; /* represents foreigh fh */ |
---|
| 225 | +}; |
---|
| 226 | + |
---|
| 227 | +struct nfsd4_getxattr { |
---|
| 228 | + char *getxa_name; /* request */ |
---|
| 229 | + u32 getxa_len; /* request */ |
---|
| 230 | + void *getxa_buf; |
---|
| 231 | +}; |
---|
| 232 | + |
---|
| 233 | +struct nfsd4_setxattr { |
---|
| 234 | + u32 setxa_flags; /* request */ |
---|
| 235 | + char *setxa_name; /* request */ |
---|
| 236 | + char *setxa_buf; /* request */ |
---|
| 237 | + u32 setxa_len; /* request */ |
---|
| 238 | + struct nfsd4_change_info setxa_cinfo; /* response */ |
---|
| 239 | +}; |
---|
| 240 | + |
---|
| 241 | +struct nfsd4_removexattr { |
---|
| 242 | + char *rmxa_name; /* request */ |
---|
| 243 | + struct nfsd4_change_info rmxa_cinfo; /* response */ |
---|
| 244 | +}; |
---|
| 245 | + |
---|
| 246 | +struct nfsd4_listxattrs { |
---|
| 247 | + u64 lsxa_cookie; /* request */ |
---|
| 248 | + u32 lsxa_maxcount; /* request */ |
---|
| 249 | + char *lsxa_buf; /* unfiltered buffer (reply) */ |
---|
| 250 | + u32 lsxa_len; /* unfiltered len (reply) */ |
---|
224 | 251 | }; |
---|
225 | 252 | |
---|
226 | 253 | struct nfsd4_open { |
---|
.. | .. |
---|
273 | 300 | |
---|
274 | 301 | |
---|
275 | 302 | struct nfsd4_read { |
---|
276 | | - stateid_t rd_stateid; /* request */ |
---|
277 | | - u64 rd_offset; /* request */ |
---|
278 | | - u32 rd_length; /* request */ |
---|
279 | | - int rd_vlen; |
---|
280 | | - struct file *rd_filp; |
---|
281 | | - bool rd_tmp_file; |
---|
| 303 | + stateid_t rd_stateid; /* request */ |
---|
| 304 | + u64 rd_offset; /* request */ |
---|
| 305 | + u32 rd_length; /* request */ |
---|
| 306 | + int rd_vlen; |
---|
| 307 | + struct nfsd_file *rd_nf; |
---|
282 | 308 | |
---|
283 | | - struct svc_rqst *rd_rqstp; /* response */ |
---|
284 | | - struct svc_fh * rd_fhp; /* response */ |
---|
| 309 | + struct svc_rqst *rd_rqstp; /* response */ |
---|
| 310 | + struct svc_fh *rd_fhp; /* response */ |
---|
285 | 311 | }; |
---|
286 | 312 | |
---|
287 | 313 | struct nfsd4_readdir { |
---|
.. | .. |
---|
410 | 436 | int spa_how; |
---|
411 | 437 | u32 spo_must_enforce[3]; |
---|
412 | 438 | u32 spo_must_allow[3]; |
---|
| 439 | + struct xdr_netobj nii_domain; |
---|
| 440 | + struct xdr_netobj nii_name; |
---|
| 441 | + struct timespec64 nii_time; |
---|
413 | 442 | }; |
---|
414 | 443 | |
---|
415 | 444 | struct nfsd4_sequence { |
---|
.. | .. |
---|
472 | 501 | u32 lc_reclaim; /* request */ |
---|
473 | 502 | u32 lc_newoffset; /* request */ |
---|
474 | 503 | u64 lc_last_wr; /* request */ |
---|
475 | | - struct timespec lc_mtime; /* request */ |
---|
| 504 | + struct timespec64 lc_mtime; /* request */ |
---|
476 | 505 | u32 lc_layout_type; /* request */ |
---|
477 | 506 | u32 lc_up_len; /* layout length */ |
---|
478 | 507 | void *lc_up_layout; /* decoded by callback */ |
---|
.. | .. |
---|
511 | 540 | u64 wr_bytes_written; |
---|
512 | 541 | u32 wr_stable_how; |
---|
513 | 542 | nfs4_verifier wr_verifier; |
---|
| 543 | + stateid_t cb_stateid; |
---|
514 | 544 | }; |
---|
515 | 545 | |
---|
516 | 546 | struct nfsd4_copy { |
---|
517 | 547 | /* request */ |
---|
518 | | - stateid_t cp_src_stateid; |
---|
519 | | - stateid_t cp_dst_stateid; |
---|
520 | | - u64 cp_src_pos; |
---|
521 | | - u64 cp_dst_pos; |
---|
522 | | - u64 cp_count; |
---|
| 548 | + stateid_t cp_src_stateid; |
---|
| 549 | + stateid_t cp_dst_stateid; |
---|
| 550 | + u64 cp_src_pos; |
---|
| 551 | + u64 cp_dst_pos; |
---|
| 552 | + u64 cp_count; |
---|
| 553 | + struct nl4_server cp_src; |
---|
| 554 | + bool cp_intra; |
---|
523 | 555 | |
---|
524 | 556 | /* both */ |
---|
525 | 557 | bool cp_synchronous; |
---|
526 | 558 | |
---|
527 | 559 | /* response */ |
---|
528 | 560 | struct nfsd42_write_res cp_res; |
---|
| 561 | + |
---|
| 562 | + /* for cb_offload */ |
---|
| 563 | + struct nfsd4_callback cp_cb; |
---|
| 564 | + __be32 nfserr; |
---|
| 565 | + struct knfsd_fh fh; |
---|
| 566 | + |
---|
| 567 | + struct nfs4_client *cp_clp; |
---|
| 568 | + |
---|
| 569 | + struct nfsd_file *nf_src; |
---|
| 570 | + struct nfsd_file *nf_dst; |
---|
| 571 | + |
---|
| 572 | + copy_stateid_t cp_stateid; |
---|
| 573 | + |
---|
| 574 | + struct list_head copies; |
---|
| 575 | + struct task_struct *copy_task; |
---|
| 576 | + refcount_t refcount; |
---|
| 577 | + bool stopped; |
---|
| 578 | + |
---|
| 579 | + struct vfsmount *ss_mnt; |
---|
| 580 | + struct nfs_fh c_fh; |
---|
| 581 | + nfs4_stateid stateid; |
---|
529 | 582 | }; |
---|
| 583 | +extern bool inter_copy_offload_enable; |
---|
530 | 584 | |
---|
531 | 585 | struct nfsd4_seek { |
---|
532 | 586 | /* request */ |
---|
.. | .. |
---|
537 | 591 | /* response */ |
---|
538 | 592 | u32 seek_eof; |
---|
539 | 593 | loff_t seek_pos; |
---|
| 594 | +}; |
---|
| 595 | + |
---|
| 596 | +struct nfsd4_offload_status { |
---|
| 597 | + /* request */ |
---|
| 598 | + stateid_t stateid; |
---|
| 599 | + |
---|
| 600 | + /* response */ |
---|
| 601 | + u64 count; |
---|
| 602 | + u32 status; |
---|
| 603 | +}; |
---|
| 604 | + |
---|
| 605 | +struct nfsd4_copy_notify { |
---|
| 606 | + /* request */ |
---|
| 607 | + stateid_t cpn_src_stateid; |
---|
| 608 | + struct nl4_server cpn_dst; |
---|
| 609 | + |
---|
| 610 | + /* response */ |
---|
| 611 | + stateid_t cpn_cnr_stateid; |
---|
| 612 | + u64 cpn_sec; |
---|
| 613 | + u32 cpn_nsec; |
---|
| 614 | + struct nl4_server cpn_src; |
---|
540 | 615 | }; |
---|
541 | 616 | |
---|
542 | 617 | struct nfsd4_op { |
---|
.. | .. |
---|
597 | 672 | struct nfsd4_fallocate deallocate; |
---|
598 | 673 | struct nfsd4_clone clone; |
---|
599 | 674 | struct nfsd4_copy copy; |
---|
| 675 | + struct nfsd4_offload_status offload_status; |
---|
| 676 | + struct nfsd4_copy_notify copy_notify; |
---|
600 | 677 | struct nfsd4_seek seek; |
---|
| 678 | + |
---|
| 679 | + struct nfsd4_getxattr getxattr; |
---|
| 680 | + struct nfsd4_setxattr setxattr; |
---|
| 681 | + struct nfsd4_listxattrs listxattrs; |
---|
| 682 | + struct nfsd4_removexattr removexattr; |
---|
601 | 683 | } u; |
---|
602 | 684 | struct nfs4_replay * replay; |
---|
603 | 685 | }; |
---|
.. | .. |
---|
699 | 781 | |
---|
700 | 782 | |
---|
701 | 783 | bool nfsd4_mach_creds_match(struct nfs4_client *cl, struct svc_rqst *rqstp); |
---|
| 784 | +int nfs4svc_decode_voidarg(struct svc_rqst *, __be32 *); |
---|
702 | 785 | int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *); |
---|
703 | 786 | int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *); |
---|
704 | 787 | int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *); |
---|