1888 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _LINUX_NFS_XDR_H3#define _LINUX_NFS_XDR_H4 5#include <linux/nfsacl.h>6#include <linux/sunrpc/gss_api.h>7 8/*9 * To change the maximum rsize and wsize supported by the NFS client, adjust10 * NFS_MAX_FILE_IO_SIZE. 64KB is a typical maximum, but some servers can11 * support a megabyte or more. The default is left at 4096 bytes, which is12 * reasonable for NFS over UDP.13 */14#define NFS_MAX_FILE_IO_SIZE (1048576U)15#define NFS_DEF_FILE_IO_SIZE (4096U)16#define NFS_MIN_FILE_IO_SIZE (1024U)17 18#define NFS_BITMASK_SZ 319 20struct nfs4_string {21 unsigned int len;22 char *data;23};24 25struct nfs_fsid {26 uint64_t major;27 uint64_t minor;28};29 30/*31 * Helper for checking equality between 2 fsids.32 */33static inline int nfs_fsid_equal(const struct nfs_fsid *a, const struct nfs_fsid *b)34{35 return a->major == b->major && a->minor == b->minor;36}37 38struct nfs4_threshold {39 __u32 bm;40 __u32 l_type;41 __u64 rd_sz;42 __u64 wr_sz;43 __u64 rd_io_sz;44 __u64 wr_io_sz;45};46 47struct nfs_fattr {48 unsigned int valid; /* which fields are valid */49 umode_t mode;50 __u32 nlink;51 kuid_t uid;52 kgid_t gid;53 dev_t rdev;54 __u64 size;55 union {56 struct {57 __u32 blocksize;58 __u32 blocks;59 } nfs2;60 struct {61 __u64 used;62 } nfs3;63 } du;64 struct nfs_fsid fsid;65 __u64 fileid;66 __u64 mounted_on_fileid;67 struct timespec64 atime;68 struct timespec64 mtime;69 struct timespec64 ctime;70 __u64 change_attr; /* NFSv4 change attribute */71 __u64 pre_change_attr;/* pre-op NFSv4 change attribute */72 __u64 pre_size; /* pre_op_attr.size */73 struct timespec64 pre_mtime; /* pre_op_attr.mtime */74 struct timespec64 pre_ctime; /* pre_op_attr.ctime */75 unsigned long time_start;76 unsigned long gencount;77 struct nfs4_string *owner_name;78 struct nfs4_string *group_name;79 struct nfs4_threshold *mdsthreshold; /* pNFS threshold hints */80 struct nfs4_label *label;81};82 83#define NFS_ATTR_FATTR_TYPE (1U << 0)84#define NFS_ATTR_FATTR_MODE (1U << 1)85#define NFS_ATTR_FATTR_NLINK (1U << 2)86#define NFS_ATTR_FATTR_OWNER (1U << 3)87#define NFS_ATTR_FATTR_GROUP (1U << 4)88#define NFS_ATTR_FATTR_RDEV (1U << 5)89#define NFS_ATTR_FATTR_SIZE (1U << 6)90#define NFS_ATTR_FATTR_PRESIZE (1U << 7)91#define NFS_ATTR_FATTR_BLOCKS_USED (1U << 8)92#define NFS_ATTR_FATTR_SPACE_USED (1U << 9)93#define NFS_ATTR_FATTR_FSID (1U << 10)94#define NFS_ATTR_FATTR_FILEID (1U << 11)95#define NFS_ATTR_FATTR_ATIME (1U << 12)96#define NFS_ATTR_FATTR_MTIME (1U << 13)97#define NFS_ATTR_FATTR_CTIME (1U << 14)98#define NFS_ATTR_FATTR_PREMTIME (1U << 15)99#define NFS_ATTR_FATTR_PRECTIME (1U << 16)100#define NFS_ATTR_FATTR_CHANGE (1U << 17)101#define NFS_ATTR_FATTR_PRECHANGE (1U << 18)102#define NFS_ATTR_FATTR_V4_LOCATIONS (1U << 19)103#define NFS_ATTR_FATTR_V4_REFERRAL (1U << 20)104#define NFS_ATTR_FATTR_MOUNTPOINT (1U << 21)105#define NFS_ATTR_FATTR_MOUNTED_ON_FILEID (1U << 22)106#define NFS_ATTR_FATTR_OWNER_NAME (1U << 23)107#define NFS_ATTR_FATTR_GROUP_NAME (1U << 24)108#define NFS_ATTR_FATTR_V4_SECURITY_LABEL (1U << 25)109 110#define NFS_ATTR_FATTR (NFS_ATTR_FATTR_TYPE \111 | NFS_ATTR_FATTR_MODE \112 | NFS_ATTR_FATTR_NLINK \113 | NFS_ATTR_FATTR_OWNER \114 | NFS_ATTR_FATTR_GROUP \115 | NFS_ATTR_FATTR_RDEV \116 | NFS_ATTR_FATTR_SIZE \117 | NFS_ATTR_FATTR_FSID \118 | NFS_ATTR_FATTR_FILEID \119 | NFS_ATTR_FATTR_ATIME \120 | NFS_ATTR_FATTR_MTIME \121 | NFS_ATTR_FATTR_CTIME \122 | NFS_ATTR_FATTR_CHANGE)123#define NFS_ATTR_FATTR_V2 (NFS_ATTR_FATTR \124 | NFS_ATTR_FATTR_BLOCKS_USED)125#define NFS_ATTR_FATTR_V3 (NFS_ATTR_FATTR \126 | NFS_ATTR_FATTR_SPACE_USED)127#define NFS_ATTR_FATTR_V4 (NFS_ATTR_FATTR \128 | NFS_ATTR_FATTR_SPACE_USED \129 | NFS_ATTR_FATTR_V4_SECURITY_LABEL)130 131/*132 * Maximal number of supported layout drivers.133 */134#define NFS_MAX_LAYOUT_TYPES 8135 136/*137 * Info on the file system138 */139struct nfs_fsinfo {140 struct nfs_fattr *fattr; /* Post-op attributes */141 __u32 rtmax; /* max. read transfer size */142 __u32 rtpref; /* pref. read transfer size */143 __u32 rtmult; /* reads should be multiple of this */144 __u32 wtmax; /* max. write transfer size */145 __u32 wtpref; /* pref. write transfer size */146 __u32 wtmult; /* writes should be multiple of this */147 __u32 dtpref; /* pref. readdir transfer size */148 __u64 maxfilesize;149 struct timespec64 time_delta; /* server time granularity */150 __u32 lease_time; /* in seconds */151 __u32 nlayouttypes; /* number of layouttypes */152 __u32 layouttype[NFS_MAX_LAYOUT_TYPES]; /* supported pnfs layout driver */153 __u32 blksize; /* preferred pnfs io block size */154 __u32 clone_blksize; /* granularity of a CLONE operation */155 enum nfs4_change_attr_type156 change_attr_type; /* Info about change attr */157 __u32 xattr_support; /* User xattrs supported */158};159 160struct nfs_fsstat {161 struct nfs_fattr *fattr; /* Post-op attributes */162 __u64 tbytes; /* total size in bytes */163 __u64 fbytes; /* # of free bytes */164 __u64 abytes; /* # of bytes available to user */165 __u64 tfiles; /* # of files */166 __u64 ffiles; /* # of free files */167 __u64 afiles; /* # of files available to user */168};169 170struct nfs2_fsstat {171 __u32 tsize; /* Server transfer size */172 __u32 bsize; /* Filesystem block size */173 __u32 blocks; /* No. of "bsize" blocks on filesystem */174 __u32 bfree; /* No. of free "bsize" blocks */175 __u32 bavail; /* No. of available "bsize" blocks */176};177 178struct nfs_pathconf {179 struct nfs_fattr *fattr; /* Post-op attributes */180 __u32 max_link; /* max # of hard links */181 __u32 max_namelen; /* max name length */182};183 184struct nfs4_change_info {185 u32 atomic;186 u64 before;187 u64 after;188};189 190struct nfs_seqid;191 192/* nfs41 sessions channel attributes */193struct nfs4_channel_attrs {194 u32 max_rqst_sz;195 u32 max_resp_sz;196 u32 max_resp_sz_cached;197 u32 max_ops;198 u32 max_reqs;199};200 201struct nfs4_slot;202struct nfs4_sequence_args {203 struct nfs4_slot *sa_slot;204 u8 sa_cache_this : 1,205 sa_privileged : 1;206};207 208struct nfs4_sequence_res {209 struct nfs4_slot *sr_slot; /* slot used to send request */210 unsigned long sr_timestamp;211 int sr_status; /* sequence operation status */212 u32 sr_status_flags;213 u32 sr_highest_slotid;214 u32 sr_target_highest_slotid;215};216 217struct nfs4_get_lease_time_args {218 struct nfs4_sequence_args la_seq_args;219};220 221struct nfs4_get_lease_time_res {222 struct nfs4_sequence_res lr_seq_res;223 struct nfs_fsinfo *lr_fsinfo;224};225 226struct xdr_stream;227struct nfs4_xdr_opaque_data;228 229struct nfs4_xdr_opaque_ops {230 void (*encode)(struct xdr_stream *, const void *args,231 const struct nfs4_xdr_opaque_data *);232 void (*free)(struct nfs4_xdr_opaque_data *);233};234 235struct nfs4_xdr_opaque_data {236 const struct nfs4_xdr_opaque_ops *ops;237 void *data;238};239 240#define PNFS_LAYOUT_MAXSIZE 4096241 242struct nfs4_layoutdriver_data {243 struct page **pages;244 __u32 pglen;245 __u32 len;246};247 248struct pnfs_layout_range {249 u32 iomode;250 u64 offset;251 u64 length;252};253 254struct nfs4_layoutget_args {255 struct nfs4_sequence_args seq_args;256 __u32 type;257 struct pnfs_layout_range range;258 __u64 minlength;259 __u32 maxcount;260 struct inode *inode;261 struct nfs_open_context *ctx;262 nfs4_stateid stateid;263 struct nfs4_layoutdriver_data layout;264};265 266struct nfs4_layoutget_res {267 struct nfs4_sequence_res seq_res;268 int status;269 __u32 return_on_close;270 struct pnfs_layout_range range;271 __u32 type;272 nfs4_stateid stateid;273 struct nfs4_layoutdriver_data *layoutp;274};275 276struct nfs4_layoutget {277 struct nfs4_layoutget_args args;278 struct nfs4_layoutget_res res;279 const struct cred *cred;280 struct pnfs_layout_hdr *lo;281 gfp_t gfp_flags;282};283 284struct nfs4_getdeviceinfo_args {285 struct nfs4_sequence_args seq_args;286 struct pnfs_device *pdev;287 __u32 notify_types;288};289 290struct nfs4_getdeviceinfo_res {291 struct nfs4_sequence_res seq_res;292 struct pnfs_device *pdev;293 __u32 notification;294};295 296struct nfs4_layoutcommit_args {297 struct nfs4_sequence_args seq_args;298 nfs4_stateid stateid;299 __u64 lastbytewritten;300 struct inode *inode;301 const u32 *bitmask;302 size_t layoutupdate_len;303 struct page *layoutupdate_page;304 struct page **layoutupdate_pages;305 __be32 *start_p;306};307 308struct nfs4_layoutcommit_res {309 struct nfs4_sequence_res seq_res;310 struct nfs_fattr *fattr;311 const struct nfs_server *server;312 int status;313};314 315struct nfs4_layoutcommit_data {316 struct rpc_task task;317 struct nfs_fattr fattr;318 struct list_head lseg_list;319 const struct cred *cred;320 struct inode *inode;321 struct nfs4_layoutcommit_args args;322 struct nfs4_layoutcommit_res res;323};324 325struct nfs4_layoutreturn_args {326 struct nfs4_sequence_args seq_args;327 struct pnfs_layout_hdr *layout;328 struct inode *inode;329 struct pnfs_layout_range range;330 nfs4_stateid stateid;331 __u32 layout_type;332 struct nfs4_xdr_opaque_data *ld_private;333};334 335struct nfs4_layoutreturn_res {336 struct nfs4_sequence_res seq_res;337 u32 lrs_present;338 nfs4_stateid stateid;339};340 341struct nfs4_layoutreturn {342 struct nfs4_layoutreturn_args args;343 struct nfs4_layoutreturn_res res;344 const struct cred *cred;345 struct nfs_client *clp;346 struct inode *inode;347 int rpc_status;348 struct nfs4_xdr_opaque_data ld_private;349};350 351#define PNFS_LAYOUTSTATS_MAXSIZE 256352 353struct nfs42_layoutstat_args;354struct nfs42_layoutstat_devinfo;355typedef void (*layoutstats_encode_t)(struct xdr_stream *,356 struct nfs42_layoutstat_args *,357 struct nfs42_layoutstat_devinfo *);358 359/* Per file per deviceid layoutstats */360struct nfs42_layoutstat_devinfo {361 struct nfs4_deviceid dev_id;362 __u64 offset;363 __u64 length;364 __u64 read_count;365 __u64 read_bytes;366 __u64 write_count;367 __u64 write_bytes;368 __u32 layout_type;369 struct nfs4_xdr_opaque_data ld_private;370};371 372struct nfs42_layoutstat_args {373 struct nfs4_sequence_args seq_args;374 struct nfs_fh *fh;375 struct inode *inode;376 nfs4_stateid stateid;377 int num_dev;378 struct nfs42_layoutstat_devinfo *devinfo;379};380 381struct nfs42_layoutstat_res {382 struct nfs4_sequence_res seq_res;383 int num_dev;384 int rpc_status;385};386 387struct nfs42_layoutstat_data {388 struct inode *inode;389 struct nfs42_layoutstat_args args;390 struct nfs42_layoutstat_res res;391};392 393struct nfs42_device_error {394 struct nfs4_deviceid dev_id;395 int status;396 enum nfs_opnum4 opnum;397};398 399struct nfs42_layout_error {400 __u64 offset;401 __u64 length;402 nfs4_stateid stateid;403 struct nfs42_device_error errors[1];404};405 406#define NFS42_LAYOUTERROR_MAX 5407 408struct nfs42_layouterror_args {409 struct nfs4_sequence_args seq_args;410 struct inode *inode;411 unsigned int num_errors;412 struct nfs42_layout_error errors[NFS42_LAYOUTERROR_MAX];413};414 415struct nfs42_layouterror_res {416 struct nfs4_sequence_res seq_res;417 unsigned int num_errors;418 int rpc_status;419};420 421struct nfs42_layouterror_data {422 struct nfs42_layouterror_args args;423 struct nfs42_layouterror_res res;424 struct inode *inode;425 struct pnfs_layout_segment *lseg;426};427 428struct nfs42_clone_args {429 struct nfs4_sequence_args seq_args;430 struct nfs_fh *src_fh;431 struct nfs_fh *dst_fh;432 nfs4_stateid src_stateid;433 nfs4_stateid dst_stateid;434 __u64 src_offset;435 __u64 dst_offset;436 __u64 count;437 const u32 *dst_bitmask;438};439 440struct nfs42_clone_res {441 struct nfs4_sequence_res seq_res;442 unsigned int rpc_status;443 struct nfs_fattr *dst_fattr;444 const struct nfs_server *server;445};446 447struct stateowner_id {448 __u64 create_time;449 __u64 uniquifier;450};451 452struct nfs4_open_delegation {453 __u32 open_delegation_type;454 union {455 struct {456 fmode_t type;457 __u32 do_recall;458 nfs4_stateid stateid;459 unsigned long pagemod_limit;460 };461 struct {462 __u32 why_no_delegation;463 __u32 will_notify;464 };465 };466};467 468/*469 * Arguments to the open call.470 */471struct nfs_openargs {472 struct nfs4_sequence_args seq_args;473 const struct nfs_fh * fh;474 struct nfs_seqid * seqid;475 int open_flags;476 fmode_t fmode;477 u32 share_access;478 u32 access;479 __u64 clientid;480 struct stateowner_id id;481 union {482 struct {483 struct iattr * attrs; /* UNCHECKED, GUARDED, EXCLUSIVE4_1 */484 nfs4_verifier verifier; /* EXCLUSIVE */485 };486 nfs4_stateid delegation; /* CLAIM_DELEGATE_CUR */487 __u32 delegation_type; /* CLAIM_PREVIOUS */488 } u;489 const struct qstr * name;490 const struct nfs_server *server; /* Needed for ID mapping */491 const u32 * bitmask;492 const u32 * open_bitmap;493 enum open_claim_type4 claim;494 enum createmode4 createmode;495 const struct nfs4_label *label;496 umode_t umask;497 struct nfs4_layoutget_args *lg_args;498};499 500struct nfs_openres {501 struct nfs4_sequence_res seq_res;502 nfs4_stateid stateid;503 struct nfs_fh fh;504 struct nfs4_change_info cinfo;505 __u32 rflags;506 struct nfs_fattr * f_attr;507 struct nfs_seqid * seqid;508 const struct nfs_server *server;509 __u32 attrset[NFS4_BITMAP_SIZE];510 struct nfs4_string *owner;511 struct nfs4_string *group_owner;512 struct nfs4_open_delegation delegation;513 __u32 access_request;514 __u32 access_supported;515 __u32 access_result;516 struct nfs4_layoutget_res *lg_res;517};518 519/*520 * Arguments to the open_confirm call.521 */522struct nfs_open_confirmargs {523 struct nfs4_sequence_args seq_args;524 const struct nfs_fh * fh;525 nfs4_stateid * stateid;526 struct nfs_seqid * seqid;527};528 529struct nfs_open_confirmres {530 struct nfs4_sequence_res seq_res;531 nfs4_stateid stateid;532 struct nfs_seqid * seqid;533};534 535/*536 * Arguments to the close call.537 */538struct nfs_closeargs {539 struct nfs4_sequence_args seq_args;540 struct nfs_fh * fh;541 nfs4_stateid stateid;542 struct nfs_seqid * seqid;543 fmode_t fmode;544 u32 share_access;545 const u32 * bitmask;546 u32 bitmask_store[NFS_BITMASK_SZ];547 struct nfs4_layoutreturn_args *lr_args;548};549 550struct nfs_closeres {551 struct nfs4_sequence_res seq_res;552 nfs4_stateid stateid;553 struct nfs_fattr * fattr;554 struct nfs_seqid * seqid;555 const struct nfs_server *server;556 struct nfs4_layoutreturn_res *lr_res;557 int lr_ret;558};559/*560 * * Arguments to the lock,lockt, and locku call.561 * */562struct nfs_lowner {563 __u64 clientid;564 __u64 id;565 dev_t s_dev;566};567 568struct nfs_lock_args {569 struct nfs4_sequence_args seq_args;570 struct nfs_fh * fh;571 struct file_lock * fl;572 struct nfs_seqid * lock_seqid;573 nfs4_stateid lock_stateid;574 struct nfs_seqid * open_seqid;575 nfs4_stateid open_stateid;576 struct nfs_lowner lock_owner;577 unsigned char block : 1;578 unsigned char reclaim : 1;579 unsigned char new_lock : 1;580 unsigned char new_lock_owner : 1;581};582 583struct nfs_lock_res {584 struct nfs4_sequence_res seq_res;585 nfs4_stateid stateid;586 struct nfs_seqid * lock_seqid;587 struct nfs_seqid * open_seqid;588};589 590struct nfs_locku_args {591 struct nfs4_sequence_args seq_args;592 struct nfs_fh * fh;593 struct file_lock * fl;594 struct nfs_seqid * seqid;595 nfs4_stateid stateid;596};597 598struct nfs_locku_res {599 struct nfs4_sequence_res seq_res;600 nfs4_stateid stateid;601 struct nfs_seqid * seqid;602};603 604struct nfs_lockt_args {605 struct nfs4_sequence_args seq_args;606 struct nfs_fh * fh;607 struct file_lock * fl;608 struct nfs_lowner lock_owner;609};610 611struct nfs_lockt_res {612 struct nfs4_sequence_res seq_res;613 struct file_lock * denied; /* LOCK, LOCKT failed */614};615 616struct nfs_release_lockowner_args {617 struct nfs4_sequence_args seq_args;618 struct nfs_lowner lock_owner;619};620 621struct nfs_release_lockowner_res {622 struct nfs4_sequence_res seq_res;623};624 625struct nfs4_delegattr {626 struct timespec64 atime;627 struct timespec64 mtime;628 bool atime_set;629 bool mtime_set;630};631 632struct nfs4_delegreturnargs {633 struct nfs4_sequence_args seq_args;634 const struct nfs_fh *fhandle;635 const nfs4_stateid *stateid;636 const u32 *bitmask;637 u32 bitmask_store[NFS_BITMASK_SZ];638 struct nfs4_layoutreturn_args *lr_args;639 struct nfs4_delegattr *sattr_args;640};641 642struct nfs4_delegreturnres {643 struct nfs4_sequence_res seq_res;644 struct nfs_fattr * fattr;645 struct nfs_server *server;646 struct nfs4_layoutreturn_res *lr_res;647 int lr_ret;648 bool sattr_res;649 int sattr_ret;650};651 652/*653 * Arguments to the write call.654 */655struct nfs_write_verifier {656 char data[8];657};658 659struct nfs_writeverf {660 struct nfs_write_verifier verifier;661 enum nfs3_stable_how committed;662};663 664/*665 * Arguments shared by the read and write call.666 */667struct nfs_pgio_args {668 struct nfs4_sequence_args seq_args;669 struct nfs_fh * fh;670 struct nfs_open_context *context;671 struct nfs_lock_context *lock_context;672 nfs4_stateid stateid;673 __u64 offset;674 __u32 count;675 unsigned int pgbase;676 struct page ** pages;677 union {678 unsigned int replen; /* used by read */679 struct {680 const u32 * bitmask; /* used by write */681 u32 bitmask_store[NFS_BITMASK_SZ]; /* used by write */682 enum nfs3_stable_how stable; /* used by write */683 };684 };685};686 687struct nfs_pgio_res {688 struct nfs4_sequence_res seq_res;689 struct nfs_fattr * fattr;690 __u64 count;691 __u32 op_status;692 union {693 struct {694 unsigned int replen; /* used by read */695 int eof; /* used by read */696 void * scratch; /* used by read */697 };698 struct {699 struct nfs_writeverf * verf; /* used by write */700 const struct nfs_server *server; /* used by write */701 };702 };703};704 705/*706 * Arguments to the commit call.707 */708struct nfs_commitargs {709 struct nfs4_sequence_args seq_args;710 struct nfs_fh *fh;711 __u64 offset;712 __u32 count;713 const u32 *bitmask;714};715 716struct nfs_commitres {717 struct nfs4_sequence_res seq_res;718 __u32 op_status;719 struct nfs_fattr *fattr;720 struct nfs_writeverf *verf;721 const struct nfs_server *server;722};723 724/*725 * Common arguments to the unlink call726 */727struct nfs_removeargs {728 struct nfs4_sequence_args seq_args;729 const struct nfs_fh *fh;730 struct qstr name;731};732 733struct nfs_removeres {734 struct nfs4_sequence_res seq_res;735 struct nfs_server *server;736 struct nfs_fattr *dir_attr;737 struct nfs4_change_info cinfo;738};739 740/*741 * Common arguments to the rename call742 */743struct nfs_renameargs {744 struct nfs4_sequence_args seq_args;745 const struct nfs_fh *old_dir;746 const struct nfs_fh *new_dir;747 const struct qstr *old_name;748 const struct qstr *new_name;749};750 751struct nfs_renameres {752 struct nfs4_sequence_res seq_res;753 struct nfs_server *server;754 struct nfs4_change_info old_cinfo;755 struct nfs_fattr *old_fattr;756 struct nfs4_change_info new_cinfo;757 struct nfs_fattr *new_fattr;758};759 760/* parsed sec= options */761#define NFS_AUTH_INFO_MAX_FLAVORS 12 /* see fs/nfs/super.c */762struct nfs_auth_info {763 unsigned int flavor_len;764 rpc_authflavor_t flavors[NFS_AUTH_INFO_MAX_FLAVORS];765};766 767/*768 * Argument struct for decode_entry function769 */770struct nfs_entry {771 __u64 ino;772 __u64 cookie;773 const char * name;774 unsigned int len;775 int eof;776 struct nfs_fh * fh;777 struct nfs_fattr * fattr;778 unsigned char d_type;779 struct nfs_server * server;780};781 782struct nfs_readdir_arg {783 struct dentry *dentry;784 const struct cred *cred;785 __be32 *verf;786 u64 cookie;787 struct page **pages;788 unsigned int page_len;789 bool plus;790};791 792struct nfs_readdir_res {793 __be32 *verf;794};795 796/*797 * The following types are for NFSv2 only.798 */799struct nfs_sattrargs {800 struct nfs_fh * fh;801 struct iattr * sattr;802};803 804struct nfs_diropargs {805 struct nfs_fh * fh;806 const char * name;807 unsigned int len;808};809 810struct nfs_createargs {811 struct nfs_fh * fh;812 const char * name;813 unsigned int len;814 struct iattr * sattr;815};816 817struct nfs_setattrargs {818 struct nfs4_sequence_args seq_args;819 struct nfs_fh * fh;820 nfs4_stateid stateid;821 struct iattr * iap;822 const struct nfs_server * server; /* Needed for name mapping */823 const u32 * bitmask;824 const struct nfs4_label *label;825};826 827enum nfs4_acl_type {828 NFS4ACL_NONE = 0,829 NFS4ACL_ACL,830 NFS4ACL_DACL,831 NFS4ACL_SACL,832};833 834struct nfs_setaclargs {835 struct nfs4_sequence_args seq_args;836 struct nfs_fh * fh;837 enum nfs4_acl_type acl_type;838 size_t acl_len;839 struct page ** acl_pages;840};841 842struct nfs_setaclres {843 struct nfs4_sequence_res seq_res;844};845 846struct nfs_getaclargs {847 struct nfs4_sequence_args seq_args;848 struct nfs_fh * fh;849 enum nfs4_acl_type acl_type;850 size_t acl_len;851 struct page ** acl_pages;852};853 854/* getxattr ACL interface flags */855#define NFS4_ACL_TRUNC 0x0001 /* ACL was truncated */856struct nfs_getaclres {857 struct nfs4_sequence_res seq_res;858 enum nfs4_acl_type acl_type;859 size_t acl_len;860 size_t acl_data_offset;861 int acl_flags;862 struct page * acl_scratch;863};864 865struct nfs_setattrres {866 struct nfs4_sequence_res seq_res;867 struct nfs_fattr * fattr;868 const struct nfs_server * server;869};870 871struct nfs_linkargs {872 struct nfs_fh * fromfh;873 struct nfs_fh * tofh;874 const char * toname;875 unsigned int tolen;876};877 878struct nfs_symlinkargs {879 struct nfs_fh * fromfh;880 const char * fromname;881 unsigned int fromlen;882 struct page ** pages;883 unsigned int pathlen;884 struct iattr * sattr;885};886 887struct nfs_readdirargs {888 struct nfs_fh * fh;889 __u32 cookie;890 unsigned int count;891 struct page ** pages;892};893 894struct nfs3_getaclargs {895 struct nfs_fh * fh;896 int mask;897 struct page ** pages;898};899 900struct nfs3_setaclargs {901 struct inode * inode;902 int mask;903 struct posix_acl * acl_access;904 struct posix_acl * acl_default;905 size_t len;906 unsigned int npages;907 struct page ** pages;908};909 910struct nfs_diropok {911 struct nfs_fh * fh;912 struct nfs_fattr * fattr;913};914 915struct nfs_readlinkargs {916 struct nfs_fh * fh;917 unsigned int pgbase;918 unsigned int pglen;919 struct page ** pages;920};921 922struct nfs3_sattrargs {923 struct nfs_fh * fh;924 struct iattr * sattr;925 unsigned int guard;926 struct timespec64 guardtime;927};928 929struct nfs3_diropargs {930 struct nfs_fh * fh;931 const char * name;932 unsigned int len;933};934 935struct nfs3_accessargs {936 struct nfs_fh * fh;937 __u32 access;938};939 940struct nfs3_createargs {941 struct nfs_fh * fh;942 const char * name;943 unsigned int len;944 struct iattr * sattr;945 enum nfs3_createmode createmode;946 __be32 verifier[2];947};948 949struct nfs3_mkdirargs {950 struct nfs_fh * fh;951 const char * name;952 unsigned int len;953 struct iattr * sattr;954};955 956struct nfs3_symlinkargs {957 struct nfs_fh * fromfh;958 const char * fromname;959 unsigned int fromlen;960 struct page ** pages;961 unsigned int pathlen;962 struct iattr * sattr;963};964 965struct nfs3_mknodargs {966 struct nfs_fh * fh;967 const char * name;968 unsigned int len;969 enum nfs3_ftype type;970 struct iattr * sattr;971 dev_t rdev;972};973 974struct nfs3_linkargs {975 struct nfs_fh * fromfh;976 struct nfs_fh * tofh;977 const char * toname;978 unsigned int tolen;979};980 981struct nfs3_readdirargs {982 struct nfs_fh * fh;983 __u64 cookie;984 __be32 verf[2];985 bool plus;986 unsigned int count;987 struct page ** pages;988};989 990struct nfs3_diropres {991 struct nfs_fattr * dir_attr;992 struct nfs_fh * fh;993 struct nfs_fattr * fattr;994};995 996struct nfs3_accessres {997 struct nfs_fattr * fattr;998 __u32 access;999};1000 1001struct nfs3_readlinkargs {1002 struct nfs_fh * fh;1003 unsigned int pgbase;1004 unsigned int pglen;1005 struct page ** pages;1006};1007 1008struct nfs3_linkres {1009 struct nfs_fattr * dir_attr;1010 struct nfs_fattr * fattr;1011};1012 1013struct nfs3_readdirres {1014 struct nfs_fattr * dir_attr;1015 __be32 * verf;1016 bool plus;1017};1018 1019struct nfs3_getaclres {1020 struct nfs_fattr * fattr;1021 int mask;1022 unsigned int acl_access_count;1023 unsigned int acl_default_count;1024 struct posix_acl * acl_access;1025 struct posix_acl * acl_default;1026};1027 1028#if IS_ENABLED(CONFIG_NFS_V4)1029 1030typedef u64 clientid4;1031 1032struct nfs4_accessargs {1033 struct nfs4_sequence_args seq_args;1034 const struct nfs_fh * fh;1035 const u32 * bitmask;1036 u32 access;1037};1038 1039struct nfs4_accessres {1040 struct nfs4_sequence_res seq_res;1041 const struct nfs_server * server;1042 struct nfs_fattr * fattr;1043 u32 supported;1044 u32 access;1045};1046 1047struct nfs4_create_arg {1048 struct nfs4_sequence_args seq_args;1049 u32 ftype;1050 union {1051 struct {1052 struct page ** pages;1053 unsigned int len;1054 } symlink; /* NF4LNK */1055 struct {1056 u32 specdata1;1057 u32 specdata2;1058 } device; /* NF4BLK, NF4CHR */1059 } u;1060 const struct qstr * name;1061 const struct nfs_server * server;1062 const struct iattr * attrs;1063 const struct nfs_fh * dir_fh;1064 const u32 * bitmask;1065 const struct nfs4_label *label;1066 umode_t umask;1067};1068 1069struct nfs4_create_res {1070 struct nfs4_sequence_res seq_res;1071 const struct nfs_server * server;1072 struct nfs_fh * fh;1073 struct nfs_fattr * fattr;1074 struct nfs4_change_info dir_cinfo;1075};1076 1077struct nfs4_fsinfo_arg {1078 struct nfs4_sequence_args seq_args;1079 const struct nfs_fh * fh;1080 const u32 * bitmask;1081};1082 1083struct nfs4_fsinfo_res {1084 struct nfs4_sequence_res seq_res;1085 struct nfs_fsinfo *fsinfo;1086};1087 1088struct nfs4_getattr_arg {1089 struct nfs4_sequence_args seq_args;1090 const struct nfs_fh * fh;1091 const u32 * bitmask;1092};1093 1094struct nfs4_getattr_res {1095 struct nfs4_sequence_res seq_res;1096 const struct nfs_server * server;1097 struct nfs_fattr * fattr;1098};1099 1100struct nfs4_link_arg {1101 struct nfs4_sequence_args seq_args;1102 const struct nfs_fh * fh;1103 const struct nfs_fh * dir_fh;1104 const struct qstr * name;1105 const u32 * bitmask;1106};1107 1108struct nfs4_link_res {1109 struct nfs4_sequence_res seq_res;1110 const struct nfs_server * server;1111 struct nfs_fattr * fattr;1112 struct nfs4_change_info cinfo;1113 struct nfs_fattr * dir_attr;1114};1115 1116struct nfs4_lookup_arg {1117 struct nfs4_sequence_args seq_args;1118 const struct nfs_fh * dir_fh;1119 const struct qstr * name;1120 const u32 * bitmask;1121};1122 1123struct nfs4_lookup_res {1124 struct nfs4_sequence_res seq_res;1125 const struct nfs_server * server;1126 struct nfs_fattr * fattr;1127 struct nfs_fh * fh;1128};1129 1130struct nfs4_lookupp_arg {1131 struct nfs4_sequence_args seq_args;1132 const struct nfs_fh *fh;1133 const u32 *bitmask;1134};1135 1136struct nfs4_lookupp_res {1137 struct nfs4_sequence_res seq_res;1138 const struct nfs_server *server;1139 struct nfs_fattr *fattr;1140 struct nfs_fh *fh;1141};1142 1143struct nfs4_lookup_root_arg {1144 struct nfs4_sequence_args seq_args;1145 const u32 * bitmask;1146};1147 1148struct nfs4_pathconf_arg {1149 struct nfs4_sequence_args seq_args;1150 const struct nfs_fh * fh;1151 const u32 * bitmask;1152};1153 1154struct nfs4_pathconf_res {1155 struct nfs4_sequence_res seq_res;1156 struct nfs_pathconf *pathconf;1157};1158 1159struct nfs4_readdir_arg {1160 struct nfs4_sequence_args seq_args;1161 const struct nfs_fh * fh;1162 u64 cookie;1163 nfs4_verifier verifier;1164 u32 count;1165 struct page ** pages; /* zero-copy data */1166 unsigned int pgbase; /* zero-copy data */1167 const u32 * bitmask;1168 bool plus;1169};1170 1171struct nfs4_readdir_res {1172 struct nfs4_sequence_res seq_res;1173 nfs4_verifier verifier;1174 unsigned int pgbase;1175};1176 1177struct nfs4_readlink {1178 struct nfs4_sequence_args seq_args;1179 const struct nfs_fh * fh;1180 unsigned int pgbase;1181 unsigned int pglen; /* zero-copy data */1182 struct page ** pages; /* zero-copy data */1183};1184 1185struct nfs4_readlink_res {1186 struct nfs4_sequence_res seq_res;1187};1188 1189struct nfs4_setclientid {1190 const nfs4_verifier * sc_verifier;1191 u32 sc_prog;1192 unsigned int sc_netid_len;1193 char sc_netid[RPCBIND_MAXNETIDLEN + 1];1194 unsigned int sc_uaddr_len;1195 char sc_uaddr[RPCBIND_MAXUADDRLEN + 1];1196 struct nfs_client *sc_clnt;1197 struct rpc_cred *sc_cred;1198};1199 1200struct nfs4_setclientid_res {1201 u64 clientid;1202 nfs4_verifier confirm;1203};1204 1205struct nfs4_statfs_arg {1206 struct nfs4_sequence_args seq_args;1207 const struct nfs_fh * fh;1208 const u32 * bitmask;1209};1210 1211struct nfs4_statfs_res {1212 struct nfs4_sequence_res seq_res;1213 struct nfs_fsstat *fsstat;1214};1215 1216struct nfs4_open_caps {1217 u32 oa_share_access[1];1218 u32 oa_share_deny[1];1219 u32 oa_share_access_want[1];1220 u32 oa_open_claim[1];1221 u32 oa_createmode[1];1222};1223 1224struct nfs4_server_caps_arg {1225 struct nfs4_sequence_args seq_args;1226 struct nfs_fh *fhandle;1227 const u32 * bitmask;1228};1229 1230struct nfs4_server_caps_res {1231 struct nfs4_sequence_res seq_res;1232 u32 attr_bitmask[3];1233 u32 exclcreat_bitmask[3];1234 u32 acl_bitmask;1235 u32 has_links;1236 u32 has_symlinks;1237 u32 fh_expire_type;1238 u32 case_insensitive;1239 u32 case_preserving;1240 struct nfs4_open_caps open_caps;1241};1242 1243#define NFS4_PATHNAME_MAXCOMPONENTS 5121244struct nfs4_pathname {1245 unsigned int ncomponents;1246 struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS];1247};1248 1249#define NFS4_FS_LOCATION_MAXSERVERS 101250struct nfs4_fs_location {1251 unsigned int nservers;1252 struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS];1253 struct nfs4_pathname rootpath;1254};1255 1256#define NFS4_FS_LOCATIONS_MAXENTRIES 101257struct nfs4_fs_locations {1258 struct nfs_fattr *fattr;1259 const struct nfs_server *server;1260 struct nfs4_pathname fs_path;1261 int nlocations;1262 struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES];1263};1264 1265struct nfs4_fs_locations_arg {1266 struct nfs4_sequence_args seq_args;1267 const struct nfs_fh *dir_fh;1268 const struct nfs_fh *fh;1269 const struct qstr *name;1270 struct page *page;1271 const u32 *bitmask;1272 clientid4 clientid;1273 unsigned char migration:1, renew:1;1274};1275 1276struct nfs4_fs_locations_res {1277 struct nfs4_sequence_res seq_res;1278 struct nfs4_fs_locations *fs_locations;1279 unsigned char migration:1, renew:1;1280};1281 1282struct nfs4_secinfo4 {1283 u32 flavor;1284 struct rpcsec_gss_info flavor_info;1285};1286 1287struct nfs4_secinfo_flavors {1288 unsigned int num_flavors;1289 struct nfs4_secinfo4 flavors[];1290};1291 1292struct nfs4_secinfo_arg {1293 struct nfs4_sequence_args seq_args;1294 const struct nfs_fh *dir_fh;1295 const struct qstr *name;1296};1297 1298struct nfs4_secinfo_res {1299 struct nfs4_sequence_res seq_res;1300 struct nfs4_secinfo_flavors *flavors;1301};1302 1303struct nfs4_fsid_present_arg {1304 struct nfs4_sequence_args seq_args;1305 const struct nfs_fh *fh;1306 clientid4 clientid;1307 unsigned char renew:1;1308};1309 1310struct nfs4_fsid_present_res {1311 struct nfs4_sequence_res seq_res;1312 struct nfs_fh *fh;1313 unsigned char renew:1;1314};1315 1316#endif /* CONFIG_NFS_V4 */1317 1318struct nfstime4 {1319 u64 seconds;1320 u32 nseconds;1321};1322 1323#ifdef CONFIG_NFS_V4_11324 1325struct pnfs_commit_bucket {1326 struct list_head written;1327 struct list_head committing;1328 struct pnfs_layout_segment *lseg;1329 struct nfs_writeverf direct_verf;1330};1331 1332struct pnfs_commit_array {1333 struct list_head cinfo_list;1334 struct list_head lseg_list;1335 struct pnfs_layout_segment *lseg;1336 struct rcu_head rcu;1337 refcount_t refcount;1338 unsigned int nbuckets;1339 struct pnfs_commit_bucket buckets[];1340};1341 1342struct pnfs_ds_commit_info {1343 struct list_head commits;1344 unsigned int nwritten;1345 unsigned int ncommitting;1346 const struct pnfs_commit_ops *ops;1347};1348 1349struct nfs41_state_protection {1350 u32 how;1351 struct nfs4_op_map enforce;1352 struct nfs4_op_map allow;1353};1354 1355struct nfs41_exchange_id_args {1356 struct nfs_client *client;1357 nfs4_verifier verifier;1358 u32 flags;1359 struct nfs41_state_protection state_protect;1360};1361 1362struct nfs41_server_owner {1363 uint64_t minor_id;1364 uint32_t major_id_sz;1365 char major_id[NFS4_OPAQUE_LIMIT];1366};1367 1368struct nfs41_server_scope {1369 uint32_t server_scope_sz;1370 char server_scope[NFS4_OPAQUE_LIMIT];1371};1372 1373struct nfs41_impl_id {1374 char domain[NFS4_OPAQUE_LIMIT + 1];1375 char name[NFS4_OPAQUE_LIMIT + 1];1376 struct nfstime4 date;1377};1378 1379#define MAX_BIND_CONN_TO_SESSION_RETRIES 31380struct nfs41_bind_conn_to_session_args {1381 struct nfs_client *client;1382 struct nfs4_sessionid sessionid;1383 u32 dir;1384 bool use_conn_in_rdma_mode;1385 int retries;1386};1387 1388struct nfs41_bind_conn_to_session_res {1389 struct nfs4_sessionid sessionid;1390 u32 dir;1391 bool use_conn_in_rdma_mode;1392};1393 1394struct nfs41_exchange_id_res {1395 u64 clientid;1396 u32 seqid;1397 u32 flags;1398 struct nfs41_server_owner *server_owner;1399 struct nfs41_server_scope *server_scope;1400 struct nfs41_impl_id *impl_id;1401 struct nfs41_state_protection state_protect;1402};1403 1404struct nfs41_create_session_args {1405 struct nfs_client *client;1406 u64 clientid;1407 uint32_t seqid;1408 uint32_t flags;1409 uint32_t cb_program;1410 struct nfs4_channel_attrs fc_attrs; /* Fore Channel */1411 struct nfs4_channel_attrs bc_attrs; /* Back Channel */1412};1413 1414struct nfs41_create_session_res {1415 struct nfs4_sessionid sessionid;1416 uint32_t seqid;1417 uint32_t flags;1418 struct nfs4_channel_attrs fc_attrs; /* Fore Channel */1419 struct nfs4_channel_attrs bc_attrs; /* Back Channel */1420};1421 1422struct nfs41_reclaim_complete_args {1423 struct nfs4_sequence_args seq_args;1424 /* In the future extend to include curr_fh for use with migration */1425 unsigned char one_fs:1;1426};1427 1428struct nfs41_reclaim_complete_res {1429 struct nfs4_sequence_res seq_res;1430};1431 1432#define SECINFO_STYLE_CURRENT_FH 01433#define SECINFO_STYLE_PARENT 11434struct nfs41_secinfo_no_name_args {1435 struct nfs4_sequence_args seq_args;1436 int style;1437};1438 1439struct nfs41_test_stateid_args {1440 struct nfs4_sequence_args seq_args;1441 nfs4_stateid stateid;1442};1443 1444struct nfs41_test_stateid_res {1445 struct nfs4_sequence_res seq_res;1446 unsigned int status;1447};1448 1449struct nfs41_free_stateid_args {1450 struct nfs4_sequence_args seq_args;1451 nfs4_stateid stateid;1452};1453 1454struct nfs41_free_stateid_res {1455 struct nfs4_sequence_res seq_res;1456 unsigned int status;1457};1458 1459#else1460 1461struct pnfs_ds_commit_info {1462};1463 1464#endif /* CONFIG_NFS_V4_1 */1465 1466#ifdef CONFIG_NFS_V4_21467struct nfs42_falloc_args {1468 struct nfs4_sequence_args seq_args;1469 1470 struct nfs_fh *falloc_fh;1471 nfs4_stateid falloc_stateid;1472 u64 falloc_offset;1473 u64 falloc_length;1474 const u32 *falloc_bitmask;1475};1476 1477struct nfs42_falloc_res {1478 struct nfs4_sequence_res seq_res;1479 unsigned int status;1480 1481 struct nfs_fattr *falloc_fattr;1482 const struct nfs_server *falloc_server;1483};1484 1485struct nfs42_copy_args {1486 struct nfs4_sequence_args seq_args;1487 1488 struct nfs_fh *src_fh;1489 nfs4_stateid src_stateid;1490 u64 src_pos;1491 1492 struct nfs_fh *dst_fh;1493 nfs4_stateid dst_stateid;1494 u64 dst_pos;1495 1496 u64 count;1497 bool sync;1498 struct nl4_server *cp_src;1499};1500 1501struct nfs42_write_res {1502 nfs4_stateid stateid;1503 u64 count;1504 struct nfs_writeverf verifier;1505};1506 1507struct nfs42_copy_res {1508 struct nfs4_sequence_res seq_res;1509 struct nfs42_write_res write_res;1510 bool consecutive;1511 bool synchronous;1512 struct nfs_commitres commit_res;1513};1514 1515struct nfs42_offload_status_args {1516 struct nfs4_sequence_args osa_seq_args;1517 struct nfs_fh *osa_src_fh;1518 nfs4_stateid osa_stateid;1519};1520 1521struct nfs42_offload_status_res {1522 struct nfs4_sequence_res osr_seq_res;1523 uint64_t osr_count;1524 int osr_status;1525};1526 1527struct nfs42_copy_notify_args {1528 struct nfs4_sequence_args cna_seq_args;1529 1530 struct nfs_fh *cna_src_fh;1531 nfs4_stateid cna_src_stateid;1532 struct nl4_server cna_dst;1533};1534 1535struct nfs42_copy_notify_res {1536 struct nfs4_sequence_res cnr_seq_res;1537 1538 struct nfstime4 cnr_lease_time;1539 nfs4_stateid cnr_stateid;1540 struct nl4_server cnr_src;1541};1542 1543struct nfs42_seek_args {1544 struct nfs4_sequence_args seq_args;1545 1546 struct nfs_fh *sa_fh;1547 nfs4_stateid sa_stateid;1548 u64 sa_offset;1549 u32 sa_what;1550};1551 1552struct nfs42_seek_res {1553 struct nfs4_sequence_res seq_res;1554 unsigned int status;1555 1556 u32 sr_eof;1557 u64 sr_offset;1558};1559 1560struct nfs42_setxattrargs {1561 struct nfs4_sequence_args seq_args;1562 struct nfs_fh *fh;1563 const u32 *bitmask;1564 const char *xattr_name;1565 u32 xattr_flags;1566 size_t xattr_len;1567 struct page **xattr_pages;1568};1569 1570struct nfs42_setxattrres {1571 struct nfs4_sequence_res seq_res;1572 struct nfs4_change_info cinfo;1573 struct nfs_fattr *fattr;1574 const struct nfs_server *server;1575};1576 1577struct nfs42_getxattrargs {1578 struct nfs4_sequence_args seq_args;1579 struct nfs_fh *fh;1580 const char *xattr_name;1581 size_t xattr_len;1582 struct page **xattr_pages;1583};1584 1585struct nfs42_getxattrres {1586 struct nfs4_sequence_res seq_res;1587 size_t xattr_len;1588};1589 1590struct nfs42_listxattrsargs {1591 struct nfs4_sequence_args seq_args;1592 struct nfs_fh *fh;1593 u32 count;1594 u64 cookie;1595 struct page **xattr_pages;1596};1597 1598struct nfs42_listxattrsres {1599 struct nfs4_sequence_res seq_res;1600 struct page *scratch;1601 void *xattr_buf;1602 size_t xattr_len;1603 u64 cookie;1604 bool eof;1605 size_t copied;1606};1607 1608struct nfs42_removexattrargs {1609 struct nfs4_sequence_args seq_args;1610 struct nfs_fh *fh;1611 const char *xattr_name;1612};1613 1614struct nfs42_removexattrres {1615 struct nfs4_sequence_res seq_res;1616 struct nfs4_change_info cinfo;1617};1618 1619#endif /* CONFIG_NFS_V4_2 */1620 1621struct nfs_page;1622 1623#define NFS_PAGEVEC_SIZE (8U)1624 1625struct nfs_page_array {1626 struct page **pagevec;1627 unsigned int npages; /* Max length of pagevec */1628 struct page *page_array[NFS_PAGEVEC_SIZE];1629};1630 1631/* used as flag bits in nfs_pgio_header */1632enum {1633 NFS_IOHDR_ERROR = 0,1634 NFS_IOHDR_EOF,1635 NFS_IOHDR_REDO,1636 NFS_IOHDR_STAT,1637 NFS_IOHDR_RESEND_PNFS,1638 NFS_IOHDR_RESEND_MDS,1639 NFS_IOHDR_UNSTABLE_WRITES,1640};1641 1642struct nfs_io_completion;1643struct nfs_pgio_header {1644 struct inode *inode;1645 const struct cred *cred;1646 struct list_head pages;1647 struct nfs_page *req;1648 struct nfs_writeverf verf; /* Used for writes */1649 fmode_t rw_mode;1650 struct pnfs_layout_segment *lseg;1651 loff_t io_start;1652 const struct rpc_call_ops *mds_ops;1653 void (*release) (struct nfs_pgio_header *hdr);1654 const struct nfs_pgio_completion_ops *completion_ops;1655 const struct nfs_rw_ops *rw_ops;1656 struct nfs_io_completion *io_completion;1657 struct nfs_direct_req *dreq;1658#ifdef CONFIG_NFS_FSCACHE1659 void *netfs;1660#endif1661 1662 int pnfs_error;1663 int error; /* merge with pnfs_error */1664 unsigned int good_bytes; /* boundary of good data */1665 unsigned long flags;1666 1667 /*1668 * rpc data1669 */1670 struct rpc_task task;1671 struct nfs_fattr fattr;1672 struct nfs_pgio_args args; /* argument struct */1673 struct nfs_pgio_res res; /* result struct */1674 unsigned long timestamp; /* For lease renewal */1675 int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);1676 __u64 mds_offset; /* Filelayout dense stripe */1677 struct nfs_page_array page_array;1678 struct nfs_client *ds_clp; /* pNFS data server */1679 u32 ds_commit_idx; /* ds index if ds_clp is set */1680 u32 pgio_mirror_idx;/* mirror index in pgio layer */1681};1682 1683struct nfs_mds_commit_info {1684 atomic_t rpcs_out;1685 atomic_long_t ncommit;1686 struct list_head list;1687};1688 1689struct nfs_commit_info;1690struct nfs_commit_data;1691struct nfs_inode;1692struct nfs_commit_completion_ops {1693 void (*completion) (struct nfs_commit_data *data);1694 void (*resched_write) (struct nfs_commit_info *, struct nfs_page *);1695};1696 1697struct nfs_commit_info {1698 struct inode *inode; /* Needed for inode->i_lock */1699 struct nfs_mds_commit_info *mds;1700 struct pnfs_ds_commit_info *ds;1701 struct nfs_direct_req *dreq; /* O_DIRECT request */1702 const struct nfs_commit_completion_ops *completion_ops;1703};1704 1705struct nfs_commit_data {1706 struct rpc_task task;1707 struct inode *inode;1708 const struct cred *cred;1709 struct nfs_fattr fattr;1710 struct nfs_writeverf verf;1711 struct list_head pages; /* Coalesced requests we wish to flush */1712 struct list_head list; /* lists of struct nfs_write_data */1713 struct nfs_direct_req *dreq; /* O_DIRECT request */1714 struct nfs_commitargs args; /* argument struct */1715 struct nfs_commitres res; /* result struct */1716 struct nfs_open_context *context;1717 struct pnfs_layout_segment *lseg;1718 struct nfs_client *ds_clp; /* pNFS data server */1719 int ds_commit_index;1720 loff_t lwb;1721 const struct rpc_call_ops *mds_ops;1722 const struct nfs_commit_completion_ops *completion_ops;1723 int (*commit_done_cb) (struct rpc_task *task, struct nfs_commit_data *data);1724 unsigned long flags;1725};1726 1727struct nfs_pgio_completion_ops {1728 void (*error_cleanup)(struct list_head *head, int);1729 void (*init_hdr)(struct nfs_pgio_header *hdr);1730 void (*completion)(struct nfs_pgio_header *hdr);1731 void (*reschedule_io)(struct nfs_pgio_header *hdr);1732};1733 1734struct nfs_unlinkdata {1735 struct nfs_removeargs args;1736 struct nfs_removeres res;1737 struct dentry *dentry;1738 wait_queue_head_t wq;1739 const struct cred *cred;1740 struct nfs_fattr dir_attr;1741 long timeout;1742};1743 1744struct nfs_renamedata {1745 struct nfs_renameargs args;1746 struct nfs_renameres res;1747 struct rpc_task task;1748 const struct cred *cred;1749 struct inode *old_dir;1750 struct dentry *old_dentry;1751 struct nfs_fattr old_fattr;1752 struct inode *new_dir;1753 struct dentry *new_dentry;1754 struct nfs_fattr new_fattr;1755 void (*complete)(struct rpc_task *, struct nfs_renamedata *);1756 long timeout;1757 bool cancelled;1758};1759 1760struct nfs_access_entry;1761struct nfs_client;1762struct rpc_timeout;1763struct nfs_subversion;1764struct nfs_mount_info;1765struct nfs_client_initdata;1766struct nfs_pageio_descriptor;1767struct fs_context;1768 1769/*1770 * RPC procedure vector for NFSv2/NFSv3 demuxing1771 */1772struct nfs_rpc_ops {1773 u32 version; /* Protocol version */1774 const struct dentry_operations *dentry_ops;1775 const struct inode_operations *dir_inode_ops;1776 const struct inode_operations *file_inode_ops;1777 const struct file_operations *file_ops;1778 const struct nlmclnt_operations *nlmclnt_ops;1779 1780 int (*getroot) (struct nfs_server *, struct nfs_fh *,1781 struct nfs_fsinfo *);1782 int (*submount) (struct fs_context *, struct nfs_server *);1783 int (*try_get_tree) (struct fs_context *);1784 int (*getattr) (struct nfs_server *, struct nfs_fh *,1785 struct nfs_fattr *, struct inode *);1786 int (*setattr) (struct dentry *, struct nfs_fattr *,1787 struct iattr *);1788 int (*lookup) (struct inode *, struct dentry *,1789 struct nfs_fh *, struct nfs_fattr *);1790 int (*lookupp) (struct inode *, struct nfs_fh *,1791 struct nfs_fattr *);1792 int (*access) (struct inode *, struct nfs_access_entry *, const struct cred *);1793 int (*readlink)(struct inode *, struct page *, unsigned int,1794 unsigned int);1795 int (*create) (struct inode *, struct dentry *,1796 struct iattr *, int);1797 int (*remove) (struct inode *, struct dentry *);1798 void (*unlink_setup) (struct rpc_message *, struct dentry *, struct inode *);1799 void (*unlink_rpc_prepare) (struct rpc_task *, struct nfs_unlinkdata *);1800 int (*unlink_done) (struct rpc_task *, struct inode *);1801 void (*rename_setup) (struct rpc_message *msg,1802 struct dentry *old_dentry,1803 struct dentry *new_dentry);1804 void (*rename_rpc_prepare)(struct rpc_task *task, struct nfs_renamedata *);1805 int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir);1806 int (*link) (struct inode *, struct inode *, const struct qstr *);1807 int (*symlink) (struct inode *, struct dentry *, struct folio *,1808 unsigned int, struct iattr *);1809 int (*mkdir) (struct inode *, struct dentry *, struct iattr *);1810 int (*rmdir) (struct inode *, const struct qstr *);1811 int (*readdir) (struct nfs_readdir_arg *, struct nfs_readdir_res *);1812 int (*mknod) (struct inode *, struct dentry *, struct iattr *,1813 dev_t);1814 int (*statfs) (struct nfs_server *, struct nfs_fh *,1815 struct nfs_fsstat *);1816 int (*fsinfo) (struct nfs_server *, struct nfs_fh *,1817 struct nfs_fsinfo *);1818 int (*pathconf) (struct nfs_server *, struct nfs_fh *,1819 struct nfs_pathconf *);1820 int (*set_capabilities)(struct nfs_server *, struct nfs_fh *);1821 int (*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);1822 int (*pgio_rpc_prepare)(struct rpc_task *,1823 struct nfs_pgio_header *);1824 void (*read_setup)(struct nfs_pgio_header *, struct rpc_message *);1825 int (*read_done)(struct rpc_task *, struct nfs_pgio_header *);1826 void (*write_setup)(struct nfs_pgio_header *, struct rpc_message *,1827 struct rpc_clnt **);1828 int (*write_done)(struct rpc_task *, struct nfs_pgio_header *);1829 void (*commit_setup) (struct nfs_commit_data *, struct rpc_message *,1830 struct rpc_clnt **);1831 void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);1832 int (*commit_done) (struct rpc_task *, struct nfs_commit_data *);1833 int (*lock)(struct file *, int, struct file_lock *);1834 int (*lock_check_bounds)(const struct file_lock *);1835 void (*clear_acl_cache)(struct inode *);1836 void (*close_context)(struct nfs_open_context *ctx, int);1837 struct inode * (*open_context) (struct inode *dir,1838 struct nfs_open_context *ctx,1839 int open_flags,1840 struct iattr *iattr,1841 int *);1842 int (*have_delegation)(struct inode *, fmode_t, int);1843 int (*return_delegation)(struct inode *);1844 struct nfs_client *(*alloc_client) (const struct nfs_client_initdata *);1845 struct nfs_client *(*init_client) (struct nfs_client *,1846 const struct nfs_client_initdata *);1847 void (*free_client) (struct nfs_client *);1848 struct nfs_server *(*create_server)(struct fs_context *);1849 struct nfs_server *(*clone_server)(struct nfs_server *, struct nfs_fh *,1850 struct nfs_fattr *, rpc_authflavor_t);1851 int (*discover_trunking)(struct nfs_server *, struct nfs_fh *);1852 void (*enable_swap)(struct inode *inode);1853 void (*disable_swap)(struct inode *inode);1854};1855 1856/*1857 * Helper functions used by NFS client and/or server1858 */1859static inline void encode_opaque_fixed(struct xdr_stream *xdr,1860 const void *buf, size_t len)1861{1862 WARN_ON_ONCE(xdr_stream_encode_opaque_fixed(xdr, buf, len) < 0);1863}1864 1865static inline int decode_opaque_fixed(struct xdr_stream *xdr,1866 void *buf, size_t len)1867{1868 ssize_t ret = xdr_stream_decode_opaque_fixed(xdr, buf, len);1869 if (unlikely(ret < 0))1870 return -EIO;1871 return 0;1872}1873 1874/*1875 * Function vectors etc. for the NFS client1876 */1877extern const struct nfs_rpc_ops nfs_v2_clientops;1878extern const struct nfs_rpc_ops nfs_v3_clientops;1879extern const struct nfs_rpc_ops nfs_v4_clientops;1880extern const struct rpc_version nfs_version2;1881extern const struct rpc_version nfs_version3;1882extern const struct rpc_version nfs_version4;1883 1884extern const struct rpc_version nfsacl_version3;1885extern const struct rpc_program nfsacl_program;1886 1887#endif /* _LINUX_NFS_XDR_H */1888