cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

nfs_xdr.h (43179B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _LINUX_NFS_XDR_H
      3#define _LINUX_NFS_XDR_H
      4
      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, adjust
     10 * NFS_MAX_FILE_IO_SIZE.  64KB is a typical maximum, but some servers can
     11 * support a megabyte or more.  The default is left at 4096 bytes, which is
     12 * 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		3
     19
     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 8
    135
    136/*
    137 * Info on the file system
    138 */
    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_type
    156				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 4096
    241
    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 256
    352
    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 5
    407
    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	__u32	uniquifier;
    450};
    451
    452/*
    453 * Arguments to the open call.
    454 */
    455struct nfs_openargs {
    456	struct nfs4_sequence_args	seq_args;
    457	const struct nfs_fh *	fh;
    458	struct nfs_seqid *	seqid;
    459	int			open_flags;
    460	fmode_t			fmode;
    461	u32			share_access;
    462	u32			access;
    463	__u64                   clientid;
    464	struct stateowner_id	id;
    465	union {
    466		struct {
    467			struct iattr *  attrs;    /* UNCHECKED, GUARDED, EXCLUSIVE4_1 */
    468			nfs4_verifier   verifier; /* EXCLUSIVE */
    469		};
    470		nfs4_stateid	delegation;		/* CLAIM_DELEGATE_CUR */
    471		fmode_t		delegation_type;	/* CLAIM_PREVIOUS */
    472	} u;
    473	const struct qstr *	name;
    474	const struct nfs_server *server;	 /* Needed for ID mapping */
    475	const u32 *		bitmask;
    476	const u32 *		open_bitmap;
    477	enum open_claim_type4	claim;
    478	enum createmode4	createmode;
    479	const struct nfs4_label *label;
    480	umode_t			umask;
    481	struct nfs4_layoutget_args *lg_args;
    482};
    483
    484struct nfs_openres {
    485	struct nfs4_sequence_res	seq_res;
    486	nfs4_stateid            stateid;
    487	struct nfs_fh           fh;
    488	struct nfs4_change_info	cinfo;
    489	__u32                   rflags;
    490	struct nfs_fattr *      f_attr;
    491	struct nfs_seqid *	seqid;
    492	const struct nfs_server *server;
    493	fmode_t			delegation_type;
    494	nfs4_stateid		delegation;
    495	unsigned long		pagemod_limit;
    496	__u32			do_recall;
    497	__u32			attrset[NFS4_BITMAP_SIZE];
    498	struct nfs4_string	*owner;
    499	struct nfs4_string	*group_owner;
    500	__u32			access_request;
    501	__u32			access_supported;
    502	__u32			access_result;
    503	struct nfs4_layoutget_res *lg_res;
    504};
    505
    506/*
    507 * Arguments to the open_confirm call.
    508 */
    509struct nfs_open_confirmargs {
    510	struct nfs4_sequence_args	seq_args;
    511	const struct nfs_fh *	fh;
    512	nfs4_stateid *		stateid;
    513	struct nfs_seqid *	seqid;
    514};
    515
    516struct nfs_open_confirmres {
    517	struct nfs4_sequence_res	seq_res;
    518	nfs4_stateid            stateid;
    519	struct nfs_seqid *	seqid;
    520};
    521
    522/*
    523 * Arguments to the close call.
    524 */
    525struct nfs_closeargs {
    526	struct nfs4_sequence_args	seq_args;
    527	struct nfs_fh *         fh;
    528	nfs4_stateid 		stateid;
    529	struct nfs_seqid *	seqid;
    530	fmode_t			fmode;
    531	u32			share_access;
    532	const u32 *		bitmask;
    533	u32			bitmask_store[NFS_BITMASK_SZ];
    534	struct nfs4_layoutreturn_args *lr_args;
    535};
    536
    537struct nfs_closeres {
    538	struct nfs4_sequence_res	seq_res;
    539	nfs4_stateid            stateid;
    540	struct nfs_fattr *	fattr;
    541	struct nfs_seqid *	seqid;
    542	const struct nfs_server *server;
    543	struct nfs4_layoutreturn_res *lr_res;
    544	int lr_ret;
    545};
    546/*
    547 *  * Arguments to the lock,lockt, and locku call.
    548 *   */
    549struct nfs_lowner {
    550	__u64			clientid;
    551	__u64			id;
    552	dev_t			s_dev;
    553};
    554
    555struct nfs_lock_args {
    556	struct nfs4_sequence_args	seq_args;
    557	struct nfs_fh *		fh;
    558	struct file_lock *	fl;
    559	struct nfs_seqid *	lock_seqid;
    560	nfs4_stateid		lock_stateid;
    561	struct nfs_seqid *	open_seqid;
    562	nfs4_stateid		open_stateid;
    563	struct nfs_lowner	lock_owner;
    564	unsigned char		block : 1;
    565	unsigned char		reclaim : 1;
    566	unsigned char		new_lock : 1;
    567	unsigned char		new_lock_owner : 1;
    568};
    569
    570struct nfs_lock_res {
    571	struct nfs4_sequence_res	seq_res;
    572	nfs4_stateid		stateid;
    573	struct nfs_seqid *	lock_seqid;
    574	struct nfs_seqid *	open_seqid;
    575};
    576
    577struct nfs_locku_args {
    578	struct nfs4_sequence_args	seq_args;
    579	struct nfs_fh *		fh;
    580	struct file_lock *	fl;
    581	struct nfs_seqid *	seqid;
    582	nfs4_stateid 		stateid;
    583};
    584
    585struct nfs_locku_res {
    586	struct nfs4_sequence_res	seq_res;
    587	nfs4_stateid		stateid;
    588	struct nfs_seqid *	seqid;
    589};
    590
    591struct nfs_lockt_args {
    592	struct nfs4_sequence_args	seq_args;
    593	struct nfs_fh *		fh;
    594	struct file_lock *	fl;
    595	struct nfs_lowner	lock_owner;
    596};
    597
    598struct nfs_lockt_res {
    599	struct nfs4_sequence_res	seq_res;
    600	struct file_lock *	denied; /* LOCK, LOCKT failed */
    601};
    602
    603struct nfs_release_lockowner_args {
    604	struct nfs4_sequence_args	seq_args;
    605	struct nfs_lowner	lock_owner;
    606};
    607
    608struct nfs_release_lockowner_res {
    609	struct nfs4_sequence_res	seq_res;
    610};
    611
    612struct nfs4_delegreturnargs {
    613	struct nfs4_sequence_args	seq_args;
    614	const struct nfs_fh *fhandle;
    615	const nfs4_stateid *stateid;
    616	const u32 *bitmask;
    617	u32 bitmask_store[NFS_BITMASK_SZ];
    618	struct nfs4_layoutreturn_args *lr_args;
    619};
    620
    621struct nfs4_delegreturnres {
    622	struct nfs4_sequence_res	seq_res;
    623	struct nfs_fattr * fattr;
    624	struct nfs_server *server;
    625	struct nfs4_layoutreturn_res *lr_res;
    626	int lr_ret;
    627};
    628
    629/*
    630 * Arguments to the write call.
    631 */
    632struct nfs_write_verifier {
    633	char			data[8];
    634};
    635
    636struct nfs_writeverf {
    637	struct nfs_write_verifier verifier;
    638	enum nfs3_stable_how	committed;
    639};
    640
    641/*
    642 * Arguments shared by the read and write call.
    643 */
    644struct nfs_pgio_args {
    645	struct nfs4_sequence_args	seq_args;
    646	struct nfs_fh *		fh;
    647	struct nfs_open_context *context;
    648	struct nfs_lock_context *lock_context;
    649	nfs4_stateid		stateid;
    650	__u64			offset;
    651	__u32			count;
    652	unsigned int		pgbase;
    653	struct page **		pages;
    654	union {
    655		unsigned int		replen;			/* used by read */
    656		struct {
    657			const u32 *		bitmask;	/* used by write */
    658			u32 bitmask_store[NFS_BITMASK_SZ];	/* used by write */
    659			enum nfs3_stable_how	stable;		/* used by write */
    660		};
    661	};
    662};
    663
    664struct nfs_pgio_res {
    665	struct nfs4_sequence_res	seq_res;
    666	struct nfs_fattr *	fattr;
    667	__u64			count;
    668	__u32			op_status;
    669	union {
    670		struct {
    671			unsigned int		replen;		/* used by read */
    672			int			eof;		/* used by read */
    673		};
    674		struct {
    675			struct nfs_writeverf *	verf;		/* used by write */
    676			const struct nfs_server *server;	/* used by write */
    677		};
    678	};
    679};
    680
    681/*
    682 * Arguments to the commit call.
    683 */
    684struct nfs_commitargs {
    685	struct nfs4_sequence_args	seq_args;
    686	struct nfs_fh		*fh;
    687	__u64			offset;
    688	__u32			count;
    689	const u32		*bitmask;
    690};
    691
    692struct nfs_commitres {
    693	struct nfs4_sequence_res	seq_res;
    694	__u32			op_status;
    695	struct nfs_fattr	*fattr;
    696	struct nfs_writeverf	*verf;
    697	const struct nfs_server *server;
    698};
    699
    700/*
    701 * Common arguments to the unlink call
    702 */
    703struct nfs_removeargs {
    704	struct nfs4_sequence_args	seq_args;
    705	const struct nfs_fh	*fh;
    706	struct qstr		name;
    707};
    708
    709struct nfs_removeres {
    710	struct nfs4_sequence_res 	seq_res;
    711	struct nfs_server *server;
    712	struct nfs_fattr	*dir_attr;
    713	struct nfs4_change_info	cinfo;
    714};
    715
    716/*
    717 * Common arguments to the rename call
    718 */
    719struct nfs_renameargs {
    720	struct nfs4_sequence_args	seq_args;
    721	const struct nfs_fh		*old_dir;
    722	const struct nfs_fh		*new_dir;
    723	const struct qstr		*old_name;
    724	const struct qstr		*new_name;
    725};
    726
    727struct nfs_renameres {
    728	struct nfs4_sequence_res	seq_res;
    729	struct nfs_server		*server;
    730	struct nfs4_change_info		old_cinfo;
    731	struct nfs_fattr		*old_fattr;
    732	struct nfs4_change_info		new_cinfo;
    733	struct nfs_fattr		*new_fattr;
    734};
    735
    736/* parsed sec= options */
    737#define NFS_AUTH_INFO_MAX_FLAVORS 12 /* see fs/nfs/super.c */
    738struct nfs_auth_info {
    739	unsigned int            flavor_len;
    740	rpc_authflavor_t        flavors[NFS_AUTH_INFO_MAX_FLAVORS];
    741};
    742
    743/*
    744 * Argument struct for decode_entry function
    745 */
    746struct nfs_entry {
    747	__u64			ino;
    748	__u64			cookie;
    749	const char *		name;
    750	unsigned int		len;
    751	int			eof;
    752	struct nfs_fh *		fh;
    753	struct nfs_fattr *	fattr;
    754	unsigned char		d_type;
    755	struct nfs_server *	server;
    756};
    757
    758struct nfs_readdir_arg {
    759	struct dentry		*dentry;
    760	const struct cred	*cred;
    761	__be32			*verf;
    762	u64			cookie;
    763	struct page		**pages;
    764	unsigned int		page_len;
    765	bool			plus;
    766};
    767
    768struct nfs_readdir_res {
    769	__be32			*verf;
    770};
    771
    772/*
    773 * The following types are for NFSv2 only.
    774 */
    775struct nfs_sattrargs {
    776	struct nfs_fh *		fh;
    777	struct iattr *		sattr;
    778};
    779
    780struct nfs_diropargs {
    781	struct nfs_fh *		fh;
    782	const char *		name;
    783	unsigned int		len;
    784};
    785
    786struct nfs_createargs {
    787	struct nfs_fh *		fh;
    788	const char *		name;
    789	unsigned int		len;
    790	struct iattr *		sattr;
    791};
    792
    793struct nfs_setattrargs {
    794	struct nfs4_sequence_args 	seq_args;
    795	struct nfs_fh *                 fh;
    796	nfs4_stateid                    stateid;
    797	struct iattr *                  iap;
    798	const struct nfs_server *	server; /* Needed for name mapping */
    799	const u32 *			bitmask;
    800	const struct nfs4_label		*label;
    801};
    802
    803enum nfs4_acl_type {
    804	NFS4ACL_NONE = 0,
    805	NFS4ACL_ACL,
    806	NFS4ACL_DACL,
    807	NFS4ACL_SACL,
    808};
    809
    810struct nfs_setaclargs {
    811	struct nfs4_sequence_args	seq_args;
    812	struct nfs_fh *			fh;
    813	enum nfs4_acl_type		acl_type;
    814	size_t				acl_len;
    815	struct page **			acl_pages;
    816};
    817
    818struct nfs_setaclres {
    819	struct nfs4_sequence_res	seq_res;
    820};
    821
    822struct nfs_getaclargs {
    823	struct nfs4_sequence_args 	seq_args;
    824	struct nfs_fh *			fh;
    825	enum nfs4_acl_type		acl_type;
    826	size_t				acl_len;
    827	struct page **			acl_pages;
    828};
    829
    830/* getxattr ACL interface flags */
    831#define NFS4_ACL_TRUNC		0x0001	/* ACL was truncated */
    832struct nfs_getaclres {
    833	struct nfs4_sequence_res	seq_res;
    834	enum nfs4_acl_type		acl_type;
    835	size_t				acl_len;
    836	size_t				acl_data_offset;
    837	int				acl_flags;
    838	struct page *			acl_scratch;
    839};
    840
    841struct nfs_setattrres {
    842	struct nfs4_sequence_res	seq_res;
    843	struct nfs_fattr *              fattr;
    844	const struct nfs_server *	server;
    845};
    846
    847struct nfs_linkargs {
    848	struct nfs_fh *		fromfh;
    849	struct nfs_fh *		tofh;
    850	const char *		toname;
    851	unsigned int		tolen;
    852};
    853
    854struct nfs_symlinkargs {
    855	struct nfs_fh *		fromfh;
    856	const char *		fromname;
    857	unsigned int		fromlen;
    858	struct page **		pages;
    859	unsigned int		pathlen;
    860	struct iattr *		sattr;
    861};
    862
    863struct nfs_readdirargs {
    864	struct nfs_fh *		fh;
    865	__u32			cookie;
    866	unsigned int		count;
    867	struct page **		pages;
    868};
    869
    870struct nfs3_getaclargs {
    871	struct nfs_fh *		fh;
    872	int			mask;
    873	struct page **		pages;
    874};
    875
    876struct nfs3_setaclargs {
    877	struct inode *		inode;
    878	int			mask;
    879	struct posix_acl *	acl_access;
    880	struct posix_acl *	acl_default;
    881	size_t			len;
    882	unsigned int		npages;
    883	struct page **		pages;
    884};
    885
    886struct nfs_diropok {
    887	struct nfs_fh *		fh;
    888	struct nfs_fattr *	fattr;
    889};
    890
    891struct nfs_readlinkargs {
    892	struct nfs_fh *		fh;
    893	unsigned int		pgbase;
    894	unsigned int		pglen;
    895	struct page **		pages;
    896};
    897
    898struct nfs3_sattrargs {
    899	struct nfs_fh *		fh;
    900	struct iattr *		sattr;
    901	unsigned int		guard;
    902	struct timespec64	guardtime;
    903};
    904
    905struct nfs3_diropargs {
    906	struct nfs_fh *		fh;
    907	const char *		name;
    908	unsigned int		len;
    909};
    910
    911struct nfs3_accessargs {
    912	struct nfs_fh *		fh;
    913	__u32			access;
    914};
    915
    916struct nfs3_createargs {
    917	struct nfs_fh *		fh;
    918	const char *		name;
    919	unsigned int		len;
    920	struct iattr *		sattr;
    921	enum nfs3_createmode	createmode;
    922	__be32			verifier[2];
    923};
    924
    925struct nfs3_mkdirargs {
    926	struct nfs_fh *		fh;
    927	const char *		name;
    928	unsigned int		len;
    929	struct iattr *		sattr;
    930};
    931
    932struct nfs3_symlinkargs {
    933	struct nfs_fh *		fromfh;
    934	const char *		fromname;
    935	unsigned int		fromlen;
    936	struct page **		pages;
    937	unsigned int		pathlen;
    938	struct iattr *		sattr;
    939};
    940
    941struct nfs3_mknodargs {
    942	struct nfs_fh *		fh;
    943	const char *		name;
    944	unsigned int		len;
    945	enum nfs3_ftype		type;
    946	struct iattr *		sattr;
    947	dev_t			rdev;
    948};
    949
    950struct nfs3_linkargs {
    951	struct nfs_fh *		fromfh;
    952	struct nfs_fh *		tofh;
    953	const char *		toname;
    954	unsigned int		tolen;
    955};
    956
    957struct nfs3_readdirargs {
    958	struct nfs_fh *		fh;
    959	__u64			cookie;
    960	__be32			verf[2];
    961	bool			plus;
    962	unsigned int            count;
    963	struct page **		pages;
    964};
    965
    966struct nfs3_diropres {
    967	struct nfs_fattr *	dir_attr;
    968	struct nfs_fh *		fh;
    969	struct nfs_fattr *	fattr;
    970};
    971
    972struct nfs3_accessres {
    973	struct nfs_fattr *	fattr;
    974	__u32			access;
    975};
    976
    977struct nfs3_readlinkargs {
    978	struct nfs_fh *		fh;
    979	unsigned int		pgbase;
    980	unsigned int		pglen;
    981	struct page **		pages;
    982};
    983
    984struct nfs3_linkres {
    985	struct nfs_fattr *	dir_attr;
    986	struct nfs_fattr *	fattr;
    987};
    988
    989struct nfs3_readdirres {
    990	struct nfs_fattr *	dir_attr;
    991	__be32 *		verf;
    992	bool			plus;
    993};
    994
    995struct nfs3_getaclres {
    996	struct nfs_fattr *	fattr;
    997	int			mask;
    998	unsigned int		acl_access_count;
    999	unsigned int		acl_default_count;
   1000	struct posix_acl *	acl_access;
   1001	struct posix_acl *	acl_default;
   1002};
   1003
   1004#if IS_ENABLED(CONFIG_NFS_V4)
   1005
   1006typedef u64 clientid4;
   1007
   1008struct nfs4_accessargs {
   1009	struct nfs4_sequence_args	seq_args;
   1010	const struct nfs_fh *		fh;
   1011	const u32 *			bitmask;
   1012	u32				access;
   1013};
   1014
   1015struct nfs4_accessres {
   1016	struct nfs4_sequence_res	seq_res;
   1017	const struct nfs_server *	server;
   1018	struct nfs_fattr *		fattr;
   1019	u32				supported;
   1020	u32				access;
   1021};
   1022
   1023struct nfs4_create_arg {
   1024	struct nfs4_sequence_args 	seq_args;
   1025	u32				ftype;
   1026	union {
   1027		struct {
   1028			struct page **	pages;
   1029			unsigned int	len;
   1030		} symlink;   /* NF4LNK */
   1031		struct {
   1032			u32		specdata1;
   1033			u32		specdata2;
   1034		} device;    /* NF4BLK, NF4CHR */
   1035	} u;
   1036	const struct qstr *		name;
   1037	const struct nfs_server *	server;
   1038	const struct iattr *		attrs;
   1039	const struct nfs_fh *		dir_fh;
   1040	const u32 *			bitmask;
   1041	const struct nfs4_label		*label;
   1042	umode_t				umask;
   1043};
   1044
   1045struct nfs4_create_res {
   1046	struct nfs4_sequence_res	seq_res;
   1047	const struct nfs_server *	server;
   1048	struct nfs_fh *			fh;
   1049	struct nfs_fattr *		fattr;
   1050	struct nfs4_change_info		dir_cinfo;
   1051};
   1052
   1053struct nfs4_fsinfo_arg {
   1054	struct nfs4_sequence_args	seq_args;
   1055	const struct nfs_fh *		fh;
   1056	const u32 *			bitmask;
   1057};
   1058
   1059struct nfs4_fsinfo_res {
   1060	struct nfs4_sequence_res	seq_res;
   1061	struct nfs_fsinfo	       *fsinfo;
   1062};
   1063
   1064struct nfs4_getattr_arg {
   1065	struct nfs4_sequence_args	seq_args;
   1066	const struct nfs_fh *		fh;
   1067	const u32 *			bitmask;
   1068};
   1069
   1070struct nfs4_getattr_res {
   1071	struct nfs4_sequence_res	seq_res;
   1072	const struct nfs_server *	server;
   1073	struct nfs_fattr *		fattr;
   1074};
   1075
   1076struct nfs4_link_arg {
   1077	struct nfs4_sequence_args 	seq_args;
   1078	const struct nfs_fh *		fh;
   1079	const struct nfs_fh *		dir_fh;
   1080	const struct qstr *		name;
   1081	const u32 *			bitmask;
   1082};
   1083
   1084struct nfs4_link_res {
   1085	struct nfs4_sequence_res	seq_res;
   1086	const struct nfs_server *	server;
   1087	struct nfs_fattr *		fattr;
   1088	struct nfs4_change_info		cinfo;
   1089	struct nfs_fattr *		dir_attr;
   1090};
   1091
   1092struct nfs4_lookup_arg {
   1093	struct nfs4_sequence_args	seq_args;
   1094	const struct nfs_fh *		dir_fh;
   1095	const struct qstr *		name;
   1096	const u32 *			bitmask;
   1097};
   1098
   1099struct nfs4_lookup_res {
   1100	struct nfs4_sequence_res	seq_res;
   1101	const struct nfs_server *	server;
   1102	struct nfs_fattr *		fattr;
   1103	struct nfs_fh *			fh;
   1104};
   1105
   1106struct nfs4_lookupp_arg {
   1107	struct nfs4_sequence_args	seq_args;
   1108	const struct nfs_fh		*fh;
   1109	const u32			*bitmask;
   1110};
   1111
   1112struct nfs4_lookupp_res {
   1113	struct nfs4_sequence_res	seq_res;
   1114	const struct nfs_server		*server;
   1115	struct nfs_fattr		*fattr;
   1116	struct nfs_fh			*fh;
   1117};
   1118
   1119struct nfs4_lookup_root_arg {
   1120	struct nfs4_sequence_args	seq_args;
   1121	const u32 *			bitmask;
   1122};
   1123
   1124struct nfs4_pathconf_arg {
   1125	struct nfs4_sequence_args	seq_args;
   1126	const struct nfs_fh *		fh;
   1127	const u32 *			bitmask;
   1128};
   1129
   1130struct nfs4_pathconf_res {
   1131	struct nfs4_sequence_res	seq_res;
   1132	struct nfs_pathconf	       *pathconf;
   1133};
   1134
   1135struct nfs4_readdir_arg {
   1136	struct nfs4_sequence_args	seq_args;
   1137	const struct nfs_fh *		fh;
   1138	u64				cookie;
   1139	nfs4_verifier			verifier;
   1140	u32				count;
   1141	struct page **			pages;	/* zero-copy data */
   1142	unsigned int			pgbase;	/* zero-copy data */
   1143	const u32 *			bitmask;
   1144	bool				plus;
   1145};
   1146
   1147struct nfs4_readdir_res {
   1148	struct nfs4_sequence_res	seq_res;
   1149	nfs4_verifier			verifier;
   1150	unsigned int			pgbase;
   1151};
   1152
   1153struct nfs4_readlink {
   1154	struct nfs4_sequence_args	seq_args;
   1155	const struct nfs_fh *		fh;
   1156	unsigned int			pgbase;
   1157	unsigned int			pglen;   /* zero-copy data */
   1158	struct page **			pages;   /* zero-copy data */
   1159};
   1160
   1161struct nfs4_readlink_res {
   1162	struct nfs4_sequence_res	seq_res;
   1163};
   1164
   1165struct nfs4_setclientid {
   1166	const nfs4_verifier *		sc_verifier;
   1167	u32				sc_prog;
   1168	unsigned int			sc_netid_len;
   1169	char				sc_netid[RPCBIND_MAXNETIDLEN + 1];
   1170	unsigned int			sc_uaddr_len;
   1171	char				sc_uaddr[RPCBIND_MAXUADDRLEN + 1];
   1172	struct nfs_client		*sc_clnt;
   1173	struct rpc_cred			*sc_cred;
   1174};
   1175
   1176struct nfs4_setclientid_res {
   1177	u64				clientid;
   1178	nfs4_verifier			confirm;
   1179};
   1180
   1181struct nfs4_statfs_arg {
   1182	struct nfs4_sequence_args	seq_args;
   1183	const struct nfs_fh *		fh;
   1184	const u32 *			bitmask;
   1185};
   1186
   1187struct nfs4_statfs_res {
   1188	struct nfs4_sequence_res	seq_res;
   1189	struct nfs_fsstat	       *fsstat;
   1190};
   1191
   1192struct nfs4_server_caps_arg {
   1193	struct nfs4_sequence_args	seq_args;
   1194	struct nfs_fh		       *fhandle;
   1195	const u32 *			bitmask;
   1196};
   1197
   1198struct nfs4_server_caps_res {
   1199	struct nfs4_sequence_res	seq_res;
   1200	u32				attr_bitmask[3];
   1201	u32				exclcreat_bitmask[3];
   1202	u32				acl_bitmask;
   1203	u32				has_links;
   1204	u32				has_symlinks;
   1205	u32				fh_expire_type;
   1206	u32				case_insensitive;
   1207	u32				case_preserving;
   1208};
   1209
   1210#define NFS4_PATHNAME_MAXCOMPONENTS 512
   1211struct nfs4_pathname {
   1212	unsigned int ncomponents;
   1213	struct nfs4_string components[NFS4_PATHNAME_MAXCOMPONENTS];
   1214};
   1215
   1216#define NFS4_FS_LOCATION_MAXSERVERS 10
   1217struct nfs4_fs_location {
   1218	unsigned int nservers;
   1219	struct nfs4_string servers[NFS4_FS_LOCATION_MAXSERVERS];
   1220	struct nfs4_pathname rootpath;
   1221};
   1222
   1223#define NFS4_FS_LOCATIONS_MAXENTRIES 10
   1224struct nfs4_fs_locations {
   1225	struct nfs_fattr *fattr;
   1226	const struct nfs_server *server;
   1227	struct nfs4_pathname fs_path;
   1228	int nlocations;
   1229	struct nfs4_fs_location locations[NFS4_FS_LOCATIONS_MAXENTRIES];
   1230};
   1231
   1232struct nfs4_fs_locations_arg {
   1233	struct nfs4_sequence_args	seq_args;
   1234	const struct nfs_fh *dir_fh;
   1235	const struct nfs_fh *fh;
   1236	const struct qstr *name;
   1237	struct page *page;
   1238	const u32 *bitmask;
   1239	clientid4 clientid;
   1240	unsigned char migration:1, renew:1;
   1241};
   1242
   1243struct nfs4_fs_locations_res {
   1244	struct nfs4_sequence_res	seq_res;
   1245	struct nfs4_fs_locations       *fs_locations;
   1246	unsigned char			migration:1, renew:1;
   1247};
   1248
   1249struct nfs4_secinfo4 {
   1250	u32			flavor;
   1251	struct rpcsec_gss_info	flavor_info;
   1252};
   1253
   1254struct nfs4_secinfo_flavors {
   1255	unsigned int		num_flavors;
   1256	struct nfs4_secinfo4	flavors[];
   1257};
   1258
   1259struct nfs4_secinfo_arg {
   1260	struct nfs4_sequence_args	seq_args;
   1261	const struct nfs_fh		*dir_fh;
   1262	const struct qstr		*name;
   1263};
   1264
   1265struct nfs4_secinfo_res {
   1266	struct nfs4_sequence_res	seq_res;
   1267	struct nfs4_secinfo_flavors	*flavors;
   1268};
   1269
   1270struct nfs4_fsid_present_arg {
   1271	struct nfs4_sequence_args	seq_args;
   1272	const struct nfs_fh		*fh;
   1273	clientid4			clientid;
   1274	unsigned char			renew:1;
   1275};
   1276
   1277struct nfs4_fsid_present_res {
   1278	struct nfs4_sequence_res	seq_res;
   1279	struct nfs_fh			*fh;
   1280	unsigned char			renew:1;
   1281};
   1282
   1283#endif /* CONFIG_NFS_V4 */
   1284
   1285struct nfstime4 {
   1286	u64	seconds;
   1287	u32	nseconds;
   1288};
   1289
   1290#ifdef CONFIG_NFS_V4_1
   1291
   1292struct pnfs_commit_bucket {
   1293	struct list_head written;
   1294	struct list_head committing;
   1295	struct pnfs_layout_segment *lseg;
   1296	struct nfs_writeverf direct_verf;
   1297};
   1298
   1299struct pnfs_commit_array {
   1300	struct list_head cinfo_list;
   1301	struct list_head lseg_list;
   1302	struct pnfs_layout_segment *lseg;
   1303	struct rcu_head rcu;
   1304	refcount_t refcount;
   1305	unsigned int nbuckets;
   1306	struct pnfs_commit_bucket buckets[];
   1307};
   1308
   1309struct pnfs_ds_commit_info {
   1310	struct list_head commits;
   1311	unsigned int nwritten;
   1312	unsigned int ncommitting;
   1313	const struct pnfs_commit_ops *ops;
   1314};
   1315
   1316struct nfs41_state_protection {
   1317	u32 how;
   1318	struct nfs4_op_map enforce;
   1319	struct nfs4_op_map allow;
   1320};
   1321
   1322struct nfs41_exchange_id_args {
   1323	struct nfs_client		*client;
   1324	nfs4_verifier			verifier;
   1325	u32				flags;
   1326	struct nfs41_state_protection	state_protect;
   1327};
   1328
   1329struct nfs41_server_owner {
   1330	uint64_t			minor_id;
   1331	uint32_t			major_id_sz;
   1332	char				major_id[NFS4_OPAQUE_LIMIT];
   1333};
   1334
   1335struct nfs41_server_scope {
   1336	uint32_t			server_scope_sz;
   1337	char 				server_scope[NFS4_OPAQUE_LIMIT];
   1338};
   1339
   1340struct nfs41_impl_id {
   1341	char				domain[NFS4_OPAQUE_LIMIT + 1];
   1342	char				name[NFS4_OPAQUE_LIMIT + 1];
   1343	struct nfstime4			date;
   1344};
   1345
   1346#define MAX_BIND_CONN_TO_SESSION_RETRIES 3
   1347struct nfs41_bind_conn_to_session_args {
   1348	struct nfs_client		*client;
   1349	struct nfs4_sessionid		sessionid;
   1350	u32				dir;
   1351	bool				use_conn_in_rdma_mode;
   1352	int				retries;
   1353};
   1354
   1355struct nfs41_bind_conn_to_session_res {
   1356	struct nfs4_sessionid		sessionid;
   1357	u32				dir;
   1358	bool				use_conn_in_rdma_mode;
   1359};
   1360
   1361struct nfs41_exchange_id_res {
   1362	u64				clientid;
   1363	u32				seqid;
   1364	u32				flags;
   1365	struct nfs41_server_owner	*server_owner;
   1366	struct nfs41_server_scope	*server_scope;
   1367	struct nfs41_impl_id		*impl_id;
   1368	struct nfs41_state_protection	state_protect;
   1369};
   1370
   1371struct nfs41_create_session_args {
   1372	struct nfs_client	       *client;
   1373	u64				clientid;
   1374	uint32_t			seqid;
   1375	uint32_t			flags;
   1376	uint32_t			cb_program;
   1377	struct nfs4_channel_attrs	fc_attrs;	/* Fore Channel */
   1378	struct nfs4_channel_attrs	bc_attrs;	/* Back Channel */
   1379};
   1380
   1381struct nfs41_create_session_res {
   1382	struct nfs4_sessionid		sessionid;
   1383	uint32_t			seqid;
   1384	uint32_t			flags;
   1385	struct nfs4_channel_attrs	fc_attrs;	/* Fore Channel */
   1386	struct nfs4_channel_attrs	bc_attrs;	/* Back Channel */
   1387};
   1388
   1389struct nfs41_reclaim_complete_args {
   1390	struct nfs4_sequence_args	seq_args;
   1391	/* In the future extend to include curr_fh for use with migration */
   1392	unsigned char			one_fs:1;
   1393};
   1394
   1395struct nfs41_reclaim_complete_res {
   1396	struct nfs4_sequence_res	seq_res;
   1397};
   1398
   1399#define SECINFO_STYLE_CURRENT_FH 0
   1400#define SECINFO_STYLE_PARENT 1
   1401struct nfs41_secinfo_no_name_args {
   1402	struct nfs4_sequence_args	seq_args;
   1403	int				style;
   1404};
   1405
   1406struct nfs41_test_stateid_args {
   1407	struct nfs4_sequence_args	seq_args;
   1408	nfs4_stateid			*stateid;
   1409};
   1410
   1411struct nfs41_test_stateid_res {
   1412	struct nfs4_sequence_res	seq_res;
   1413	unsigned int			status;
   1414};
   1415
   1416struct nfs41_free_stateid_args {
   1417	struct nfs4_sequence_args	seq_args;
   1418	nfs4_stateid			stateid;
   1419};
   1420
   1421struct nfs41_free_stateid_res {
   1422	struct nfs4_sequence_res	seq_res;
   1423	unsigned int			status;
   1424};
   1425
   1426#else
   1427
   1428struct pnfs_ds_commit_info {
   1429};
   1430
   1431#endif /* CONFIG_NFS_V4_1 */
   1432
   1433#ifdef CONFIG_NFS_V4_2
   1434struct nfs42_falloc_args {
   1435	struct nfs4_sequence_args	seq_args;
   1436
   1437	struct nfs_fh			*falloc_fh;
   1438	nfs4_stateid			 falloc_stateid;
   1439	u64				 falloc_offset;
   1440	u64				 falloc_length;
   1441	const u32			*falloc_bitmask;
   1442};
   1443
   1444struct nfs42_falloc_res {
   1445	struct nfs4_sequence_res	seq_res;
   1446	unsigned int			status;
   1447
   1448	struct nfs_fattr		*falloc_fattr;
   1449	const struct nfs_server		*falloc_server;
   1450};
   1451
   1452struct nfs42_copy_args {
   1453	struct nfs4_sequence_args	seq_args;
   1454
   1455	struct nfs_fh			*src_fh;
   1456	nfs4_stateid			src_stateid;
   1457	u64				src_pos;
   1458
   1459	struct nfs_fh			*dst_fh;
   1460	nfs4_stateid			dst_stateid;
   1461	u64				dst_pos;
   1462
   1463	u64				count;
   1464	bool				sync;
   1465	struct nl4_server		*cp_src;
   1466};
   1467
   1468struct nfs42_write_res {
   1469	nfs4_stateid		stateid;
   1470	u64			count;
   1471	struct nfs_writeverf	verifier;
   1472};
   1473
   1474struct nfs42_copy_res {
   1475	struct nfs4_sequence_res	seq_res;
   1476	struct nfs42_write_res		write_res;
   1477	bool				consecutive;
   1478	bool				synchronous;
   1479	struct nfs_commitres		commit_res;
   1480};
   1481
   1482struct nfs42_offload_status_args {
   1483	struct nfs4_sequence_args	osa_seq_args;
   1484	struct nfs_fh			*osa_src_fh;
   1485	nfs4_stateid			osa_stateid;
   1486};
   1487
   1488struct nfs42_offload_status_res {
   1489	struct nfs4_sequence_res	osr_seq_res;
   1490	uint64_t			osr_count;
   1491	int				osr_status;
   1492};
   1493
   1494struct nfs42_copy_notify_args {
   1495	struct nfs4_sequence_args	cna_seq_args;
   1496
   1497	struct nfs_fh		*cna_src_fh;
   1498	nfs4_stateid		cna_src_stateid;
   1499	struct nl4_server	cna_dst;
   1500};
   1501
   1502struct nfs42_copy_notify_res {
   1503	struct nfs4_sequence_res	cnr_seq_res;
   1504
   1505	struct nfstime4		cnr_lease_time;
   1506	nfs4_stateid		cnr_stateid;
   1507	struct nl4_server	cnr_src;
   1508};
   1509
   1510struct nfs42_seek_args {
   1511	struct nfs4_sequence_args	seq_args;
   1512
   1513	struct nfs_fh			*sa_fh;
   1514	nfs4_stateid			sa_stateid;
   1515	u64				sa_offset;
   1516	u32				sa_what;
   1517};
   1518
   1519struct nfs42_seek_res {
   1520	struct nfs4_sequence_res	seq_res;
   1521	unsigned int			status;
   1522
   1523	u32	sr_eof;
   1524	u64	sr_offset;
   1525};
   1526
   1527struct nfs42_setxattrargs {
   1528	struct nfs4_sequence_args	seq_args;
   1529	struct nfs_fh			*fh;
   1530	const char			*xattr_name;
   1531	u32				xattr_flags;
   1532	size_t				xattr_len;
   1533	struct page			**xattr_pages;
   1534};
   1535
   1536struct nfs42_setxattrres {
   1537	struct nfs4_sequence_res	seq_res;
   1538	struct nfs4_change_info		cinfo;
   1539};
   1540
   1541struct nfs42_getxattrargs {
   1542	struct nfs4_sequence_args	seq_args;
   1543	struct nfs_fh			*fh;
   1544	const char			*xattr_name;
   1545	size_t				xattr_len;
   1546	struct page			**xattr_pages;
   1547};
   1548
   1549struct nfs42_getxattrres {
   1550	struct nfs4_sequence_res	seq_res;
   1551	size_t				xattr_len;
   1552};
   1553
   1554struct nfs42_listxattrsargs {
   1555	struct nfs4_sequence_args	seq_args;
   1556	struct nfs_fh			*fh;
   1557	u32				count;
   1558	u64				cookie;
   1559	struct page			**xattr_pages;
   1560};
   1561
   1562struct nfs42_listxattrsres {
   1563	struct nfs4_sequence_res	seq_res;
   1564	struct page			*scratch;
   1565	void				*xattr_buf;
   1566	size_t				xattr_len;
   1567	u64				cookie;
   1568	bool				eof;
   1569	size_t				copied;
   1570};
   1571
   1572struct nfs42_removexattrargs {
   1573	struct nfs4_sequence_args	seq_args;
   1574	struct nfs_fh			*fh;
   1575	const char			*xattr_name;
   1576};
   1577
   1578struct nfs42_removexattrres {
   1579	struct nfs4_sequence_res	seq_res;
   1580	struct nfs4_change_info		cinfo;
   1581};
   1582
   1583#endif /* CONFIG_NFS_V4_2 */
   1584
   1585struct nfs_page;
   1586
   1587#define NFS_PAGEVEC_SIZE	(8U)
   1588
   1589struct nfs_page_array {
   1590	struct page		**pagevec;
   1591	unsigned int		npages;		/* Max length of pagevec */
   1592	struct page		*page_array[NFS_PAGEVEC_SIZE];
   1593};
   1594
   1595/* used as flag bits in nfs_pgio_header */
   1596enum {
   1597	NFS_IOHDR_ERROR = 0,
   1598	NFS_IOHDR_EOF,
   1599	NFS_IOHDR_REDO,
   1600	NFS_IOHDR_STAT,
   1601	NFS_IOHDR_RESEND_PNFS,
   1602	NFS_IOHDR_RESEND_MDS,
   1603};
   1604
   1605struct nfs_io_completion;
   1606struct nfs_pgio_header {
   1607	struct inode		*inode;
   1608	const struct cred		*cred;
   1609	struct list_head	pages;
   1610	struct nfs_page		*req;
   1611	struct nfs_writeverf	verf;		/* Used for writes */
   1612	fmode_t			rw_mode;
   1613	struct pnfs_layout_segment *lseg;
   1614	loff_t			io_start;
   1615	const struct rpc_call_ops *mds_ops;
   1616	void (*release) (struct nfs_pgio_header *hdr);
   1617	const struct nfs_pgio_completion_ops *completion_ops;
   1618	const struct nfs_rw_ops	*rw_ops;
   1619	struct nfs_io_completion *io_completion;
   1620	struct nfs_direct_req	*dreq;
   1621
   1622	int			pnfs_error;
   1623	int			error;		/* merge with pnfs_error */
   1624	unsigned int		good_bytes;	/* boundary of good data */
   1625	unsigned long		flags;
   1626
   1627	/*
   1628	 * rpc data
   1629	 */
   1630	struct rpc_task		task;
   1631	struct nfs_fattr	fattr;
   1632	struct nfs_pgio_args	args;		/* argument struct */
   1633	struct nfs_pgio_res	res;		/* result struct */
   1634	unsigned long		timestamp;	/* For lease renewal */
   1635	int (*pgio_done_cb)(struct rpc_task *, struct nfs_pgio_header *);
   1636	__u64			mds_offset;	/* Filelayout dense stripe */
   1637	struct nfs_page_array	page_array;
   1638	struct nfs_client	*ds_clp;	/* pNFS data server */
   1639	u32			ds_commit_idx;	/* ds index if ds_clp is set */
   1640	u32			pgio_mirror_idx;/* mirror index in pgio layer */
   1641};
   1642
   1643struct nfs_mds_commit_info {
   1644	atomic_t rpcs_out;
   1645	atomic_long_t		ncommit;
   1646	struct list_head	list;
   1647};
   1648
   1649struct nfs_commit_info;
   1650struct nfs_commit_data;
   1651struct nfs_inode;
   1652struct nfs_commit_completion_ops {
   1653	void (*completion) (struct nfs_commit_data *data);
   1654	void (*resched_write) (struct nfs_commit_info *, struct nfs_page *);
   1655};
   1656
   1657struct nfs_commit_info {
   1658	struct inode 			*inode;	/* Needed for inode->i_lock */
   1659	struct nfs_mds_commit_info	*mds;
   1660	struct pnfs_ds_commit_info	*ds;
   1661	struct nfs_direct_req		*dreq;	/* O_DIRECT request */
   1662	const struct nfs_commit_completion_ops *completion_ops;
   1663};
   1664
   1665struct nfs_commit_data {
   1666	struct rpc_task		task;
   1667	struct inode		*inode;
   1668	const struct cred		*cred;
   1669	struct nfs_fattr	fattr;
   1670	struct nfs_writeverf	verf;
   1671	struct list_head	pages;		/* Coalesced requests we wish to flush */
   1672	struct list_head	list;		/* lists of struct nfs_write_data */
   1673	struct nfs_direct_req	*dreq;		/* O_DIRECT request */
   1674	struct nfs_commitargs	args;		/* argument struct */
   1675	struct nfs_commitres	res;		/* result struct */
   1676	struct nfs_open_context *context;
   1677	struct pnfs_layout_segment *lseg;
   1678	struct nfs_client	*ds_clp;	/* pNFS data server */
   1679	int			ds_commit_index;
   1680	loff_t			lwb;
   1681	const struct rpc_call_ops *mds_ops;
   1682	const struct nfs_commit_completion_ops *completion_ops;
   1683	int (*commit_done_cb) (struct rpc_task *task, struct nfs_commit_data *data);
   1684	unsigned long		flags;
   1685};
   1686
   1687struct nfs_pgio_completion_ops {
   1688	void	(*error_cleanup)(struct list_head *head, int);
   1689	void	(*init_hdr)(struct nfs_pgio_header *hdr);
   1690	void	(*completion)(struct nfs_pgio_header *hdr);
   1691	void	(*reschedule_io)(struct nfs_pgio_header *hdr);
   1692};
   1693
   1694struct nfs_unlinkdata {
   1695	struct nfs_removeargs args;
   1696	struct nfs_removeres res;
   1697	struct dentry *dentry;
   1698	wait_queue_head_t wq;
   1699	const struct cred *cred;
   1700	struct nfs_fattr dir_attr;
   1701	long timeout;
   1702};
   1703
   1704struct nfs_renamedata {
   1705	struct nfs_renameargs	args;
   1706	struct nfs_renameres	res;
   1707	struct rpc_task		task;
   1708	const struct cred	*cred;
   1709	struct inode		*old_dir;
   1710	struct dentry		*old_dentry;
   1711	struct nfs_fattr	old_fattr;
   1712	struct inode		*new_dir;
   1713	struct dentry		*new_dentry;
   1714	struct nfs_fattr	new_fattr;
   1715	void (*complete)(struct rpc_task *, struct nfs_renamedata *);
   1716	long timeout;
   1717	bool cancelled;
   1718};
   1719
   1720struct nfs_access_entry;
   1721struct nfs_client;
   1722struct rpc_timeout;
   1723struct nfs_subversion;
   1724struct nfs_mount_info;
   1725struct nfs_client_initdata;
   1726struct nfs_pageio_descriptor;
   1727struct fs_context;
   1728
   1729/*
   1730 * RPC procedure vector for NFSv2/NFSv3 demuxing
   1731 */
   1732struct nfs_rpc_ops {
   1733	u32	version;		/* Protocol version */
   1734	const struct dentry_operations *dentry_ops;
   1735	const struct inode_operations *dir_inode_ops;
   1736	const struct inode_operations *file_inode_ops;
   1737	const struct file_operations *file_ops;
   1738	const struct nlmclnt_operations *nlmclnt_ops;
   1739
   1740	int	(*getroot) (struct nfs_server *, struct nfs_fh *,
   1741			    struct nfs_fsinfo *);
   1742	int	(*submount) (struct fs_context *, struct nfs_server *);
   1743	int	(*try_get_tree) (struct fs_context *);
   1744	int	(*getattr) (struct nfs_server *, struct nfs_fh *,
   1745			    struct nfs_fattr *, struct inode *);
   1746	int	(*setattr) (struct dentry *, struct nfs_fattr *,
   1747			    struct iattr *);
   1748	int	(*lookup)  (struct inode *, struct dentry *,
   1749			    struct nfs_fh *, struct nfs_fattr *);
   1750	int	(*lookupp) (struct inode *, struct nfs_fh *,
   1751			    struct nfs_fattr *);
   1752	int	(*access)  (struct inode *, struct nfs_access_entry *, const struct cred *);
   1753	int	(*readlink)(struct inode *, struct page *, unsigned int,
   1754			    unsigned int);
   1755	int	(*create)  (struct inode *, struct dentry *,
   1756			    struct iattr *, int);
   1757	int	(*remove)  (struct inode *, struct dentry *);
   1758	void	(*unlink_setup)  (struct rpc_message *, struct dentry *, struct inode *);
   1759	void	(*unlink_rpc_prepare) (struct rpc_task *, struct nfs_unlinkdata *);
   1760	int	(*unlink_done) (struct rpc_task *, struct inode *);
   1761	void	(*rename_setup)  (struct rpc_message *msg,
   1762			struct dentry *old_dentry,
   1763			struct dentry *new_dentry);
   1764	void	(*rename_rpc_prepare)(struct rpc_task *task, struct nfs_renamedata *);
   1765	int	(*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir);
   1766	int	(*link)    (struct inode *, struct inode *, const struct qstr *);
   1767	int	(*symlink) (struct inode *, struct dentry *, struct page *,
   1768			    unsigned int, struct iattr *);
   1769	int	(*mkdir)   (struct inode *, struct dentry *, struct iattr *);
   1770	int	(*rmdir)   (struct inode *, const struct qstr *);
   1771	int	(*readdir) (struct nfs_readdir_arg *, struct nfs_readdir_res *);
   1772	int	(*mknod)   (struct inode *, struct dentry *, struct iattr *,
   1773			    dev_t);
   1774	int	(*statfs)  (struct nfs_server *, struct nfs_fh *,
   1775			    struct nfs_fsstat *);
   1776	int	(*fsinfo)  (struct nfs_server *, struct nfs_fh *,
   1777			    struct nfs_fsinfo *);
   1778	int	(*pathconf) (struct nfs_server *, struct nfs_fh *,
   1779			     struct nfs_pathconf *);
   1780	int	(*set_capabilities)(struct nfs_server *, struct nfs_fh *);
   1781	int	(*decode_dirent)(struct xdr_stream *, struct nfs_entry *, bool);
   1782	int	(*pgio_rpc_prepare)(struct rpc_task *,
   1783				    struct nfs_pgio_header *);
   1784	void	(*read_setup)(struct nfs_pgio_header *, struct rpc_message *);
   1785	int	(*read_done)(struct rpc_task *, struct nfs_pgio_header *);
   1786	void	(*write_setup)(struct nfs_pgio_header *, struct rpc_message *,
   1787				struct rpc_clnt **);
   1788	int	(*write_done)(struct rpc_task *, struct nfs_pgio_header *);
   1789	void	(*commit_setup) (struct nfs_commit_data *, struct rpc_message *,
   1790				struct rpc_clnt **);
   1791	void	(*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *);
   1792	int	(*commit_done) (struct rpc_task *, struct nfs_commit_data *);
   1793	int	(*lock)(struct file *, int, struct file_lock *);
   1794	int	(*lock_check_bounds)(const struct file_lock *);
   1795	void	(*clear_acl_cache)(struct inode *);
   1796	void	(*close_context)(struct nfs_open_context *ctx, int);
   1797	struct inode * (*open_context) (struct inode *dir,
   1798				struct nfs_open_context *ctx,
   1799				int open_flags,
   1800				struct iattr *iattr,
   1801				int *);
   1802	int (*have_delegation)(struct inode *, fmode_t);
   1803	struct nfs_client *(*alloc_client) (const struct nfs_client_initdata *);
   1804	struct nfs_client *(*init_client) (struct nfs_client *,
   1805				const struct nfs_client_initdata *);
   1806	void	(*free_client) (struct nfs_client *);
   1807	struct nfs_server *(*create_server)(struct fs_context *);
   1808	struct nfs_server *(*clone_server)(struct nfs_server *, struct nfs_fh *,
   1809					   struct nfs_fattr *, rpc_authflavor_t);
   1810	int	(*discover_trunking)(struct nfs_server *, struct nfs_fh *);
   1811	void	(*enable_swap)(struct inode *inode);
   1812	void	(*disable_swap)(struct inode *inode);
   1813};
   1814
   1815/*
   1816 * 	NFS_CALL(getattr, inode, (fattr));
   1817 * into
   1818 *	NFS_PROTO(inode)->getattr(fattr);
   1819 */
   1820#define NFS_CALL(op, inode, args)	NFS_PROTO(inode)->op args
   1821
   1822/*
   1823 * Function vectors etc. for the NFS client
   1824 */
   1825extern const struct nfs_rpc_ops	nfs_v2_clientops;
   1826extern const struct nfs_rpc_ops	nfs_v3_clientops;
   1827extern const struct nfs_rpc_ops	nfs_v4_clientops;
   1828extern const struct rpc_version nfs_version2;
   1829extern const struct rpc_version nfs_version3;
   1830extern const struct rpc_version nfs_version4;
   1831
   1832extern const struct rpc_version nfsacl_version3;
   1833extern const struct rpc_program nfsacl_program;
   1834
   1835#endif