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_fs_sb.h (10409B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _NFS_FS_SB
      3#define _NFS_FS_SB
      4
      5#include <linux/list.h>
      6#include <linux/backing-dev.h>
      7#include <linux/idr.h>
      8#include <linux/wait.h>
      9#include <linux/nfs_xdr.h>
     10#include <linux/sunrpc/xprt.h>
     11
     12#include <linux/atomic.h>
     13#include <linux/refcount.h>
     14
     15struct nfs4_session;
     16struct nfs_iostats;
     17struct nlm_host;
     18struct nfs4_sequence_args;
     19struct nfs4_sequence_res;
     20struct nfs_server;
     21struct nfs4_minor_version_ops;
     22struct nfs41_server_scope;
     23struct nfs41_impl_id;
     24
     25/*
     26 * The nfs_client identifies our client state to the server.
     27 */
     28struct nfs_client {
     29	refcount_t		cl_count;
     30	atomic_t		cl_mds_count;
     31	int			cl_cons_state;	/* current construction state (-ve: init error) */
     32#define NFS_CS_READY		0		/* ready to be used */
     33#define NFS_CS_INITING		1		/* busy initialising */
     34#define NFS_CS_SESSION_INITING	2		/* busy initialising  session */
     35	unsigned long		cl_res_state;	/* NFS resources state */
     36#define NFS_CS_CALLBACK		1		/* - callback started */
     37#define NFS_CS_IDMAP		2		/* - idmap started */
     38#define NFS_CS_RENEWD		3		/* - renewd started */
     39#define NFS_CS_STOP_RENEW	4		/* no more state to renew */
     40#define NFS_CS_CHECK_LEASE_TIME	5		/* need to check lease time */
     41	unsigned long		cl_flags;	/* behavior switches */
     42#define NFS_CS_NORESVPORT	0		/* - use ephemeral src port */
     43#define NFS_CS_DISCRTRY		1		/* - disconnect on RPC retry */
     44#define NFS_CS_MIGRATION	2		/* - transparent state migr */
     45#define NFS_CS_INFINITE_SLOTS	3		/* - don't limit TCP slots */
     46#define NFS_CS_NO_RETRANS_TIMEOUT	4	/* - Disable retransmit timeouts */
     47#define NFS_CS_TSM_POSSIBLE	5		/* - Maybe state migration */
     48#define NFS_CS_NOPING		6		/* - don't ping on connect */
     49#define NFS_CS_DS		7		/* - Server is a DS */
     50#define NFS_CS_REUSEPORT	8		/* - reuse src port on reconnect */
     51	struct sockaddr_storage	cl_addr;	/* server identifier */
     52	size_t			cl_addrlen;
     53	char *			cl_hostname;	/* hostname of server */
     54	char *			cl_acceptor;	/* GSSAPI acceptor name */
     55	struct list_head	cl_share_link;	/* link in global client list */
     56	struct list_head	cl_superblocks;	/* List of nfs_server structs */
     57
     58	struct rpc_clnt *	cl_rpcclient;
     59	const struct nfs_rpc_ops *rpc_ops;	/* NFS protocol vector */
     60	int			cl_proto;	/* Network transport protocol */
     61	struct nfs_subversion *	cl_nfs_mod;	/* pointer to nfs version module */
     62
     63	u32			cl_minorversion;/* NFSv4 minorversion */
     64	unsigned int		cl_nconnect;	/* Number of connections */
     65	unsigned int		cl_max_connect; /* max number of xprts allowed */
     66	const char *		cl_principal;  /* used for machine cred */
     67
     68#if IS_ENABLED(CONFIG_NFS_V4)
     69	struct list_head	cl_ds_clients; /* auth flavor data servers */
     70	u64			cl_clientid;	/* constant */
     71	nfs4_verifier		cl_confirm;	/* Clientid verifier */
     72	unsigned long		cl_state;
     73
     74	spinlock_t		cl_lock;
     75
     76	unsigned long		cl_lease_time;
     77	unsigned long		cl_last_renewal;
     78	struct delayed_work	cl_renewd;
     79
     80	struct rpc_wait_queue	cl_rpcwaitq;
     81
     82	/* idmapper */
     83	struct idmap *		cl_idmap;
     84
     85	/* Client owner identifier */
     86	const char *		cl_owner_id;
     87
     88	u32			cl_cb_ident;	/* v4.0 callback identifier */
     89	const struct nfs4_minor_version_ops *cl_mvops;
     90	unsigned long		cl_mig_gen;
     91
     92	/* NFSv4.0 transport blocking */
     93	struct nfs4_slot_table	*cl_slot_tbl;
     94
     95	/* The sequence id to use for the next CREATE_SESSION */
     96	u32			cl_seqid;
     97	/* The flags used for obtaining the clientid during EXCHANGE_ID */
     98	u32			cl_exchange_flags;
     99	struct nfs4_session	*cl_session;	/* shared session */
    100	bool			cl_preserve_clid;
    101	struct nfs41_server_owner *cl_serverowner;
    102	struct nfs41_server_scope *cl_serverscope;
    103	struct nfs41_impl_id	*cl_implid;
    104	/* nfs 4.1+ state protection modes: */
    105	unsigned long		cl_sp4_flags;
    106#define NFS_SP4_MACH_CRED_MINIMAL  1	/* Minimal sp4_mach_cred - state ops
    107					 * must use machine cred */
    108#define NFS_SP4_MACH_CRED_CLEANUP  2	/* CLOSE and LOCKU */
    109#define NFS_SP4_MACH_CRED_SECINFO  3	/* SECINFO and SECINFO_NO_NAME */
    110#define NFS_SP4_MACH_CRED_STATEID  4	/* TEST_STATEID and FREE_STATEID */
    111#define NFS_SP4_MACH_CRED_WRITE    5	/* WRITE */
    112#define NFS_SP4_MACH_CRED_COMMIT   6	/* COMMIT */
    113#define NFS_SP4_MACH_CRED_PNFS_CLEANUP  7 /* LAYOUTRETURN */
    114#if IS_ENABLED(CONFIG_NFS_V4_1)
    115	wait_queue_head_t	cl_lock_waitq;
    116#endif /* CONFIG_NFS_V4_1 */
    117#endif /* CONFIG_NFS_V4 */
    118
    119	/* Our own IP address, as a null-terminated string.
    120	 * This is used to generate the mv0 callback address.
    121	 */
    122	char			cl_ipaddr[48];
    123	struct net		*cl_net;
    124	struct list_head	pending_cb_stateids;
    125};
    126
    127/*
    128 * NFS client parameters stored in the superblock.
    129 */
    130struct nfs_server {
    131	struct nfs_client *	nfs_client;	/* shared client and NFS4 state */
    132	struct list_head	client_link;	/* List of other nfs_server structs
    133						 * that share the same client
    134						 */
    135	struct list_head	master_link;	/* link in master servers list */
    136	struct rpc_clnt *	client;		/* RPC client handle */
    137	struct rpc_clnt *	client_acl;	/* ACL RPC client handle */
    138	struct nlm_host		*nlm_host;	/* NLM client handle */
    139	struct nfs_iostats __percpu *io_stats;	/* I/O statistics */
    140	atomic_long_t		writeback;	/* number of writeback pages */
    141	unsigned int		write_congested;/* flag set when writeback gets too high */
    142	unsigned int		flags;		/* various flags */
    143
    144/* The following are for internal use only. Also see uapi/linux/nfs_mount.h */
    145#define NFS_MOUNT_LOOKUP_CACHE_NONEG	0x10000
    146#define NFS_MOUNT_LOOKUP_CACHE_NONE	0x20000
    147#define NFS_MOUNT_NORESVPORT		0x40000
    148#define NFS_MOUNT_LEGACY_INTERFACE	0x80000
    149#define NFS_MOUNT_LOCAL_FLOCK		0x100000
    150#define NFS_MOUNT_LOCAL_FCNTL		0x200000
    151#define NFS_MOUNT_SOFTERR		0x400000
    152#define NFS_MOUNT_SOFTREVAL		0x800000
    153#define NFS_MOUNT_WRITE_EAGER		0x01000000
    154#define NFS_MOUNT_WRITE_WAIT		0x02000000
    155#define NFS_MOUNT_TRUNK_DISCOVERY	0x04000000
    156
    157	unsigned int		fattr_valid;	/* Valid attributes */
    158	unsigned int		caps;		/* server capabilities */
    159	unsigned int		rsize;		/* read size */
    160	unsigned int		rpages;		/* read size (in pages) */
    161	unsigned int		wsize;		/* write size */
    162	unsigned int		wpages;		/* write size (in pages) */
    163	unsigned int		wtmult;		/* server disk block size */
    164	unsigned int		dtsize;		/* readdir size */
    165	unsigned short		port;		/* "port=" setting */
    166	unsigned int		bsize;		/* server block size */
    167#ifdef CONFIG_NFS_V4_2
    168	unsigned int		gxasize;	/* getxattr size */
    169	unsigned int		sxasize;	/* setxattr size */
    170	unsigned int		lxasize;	/* listxattr size */
    171#endif
    172	unsigned int		acregmin;	/* attr cache timeouts */
    173	unsigned int		acregmax;
    174	unsigned int		acdirmin;
    175	unsigned int		acdirmax;
    176	unsigned int		namelen;
    177	unsigned int		options;	/* extra options enabled by mount */
    178	unsigned int		clone_blksize;	/* granularity of a CLONE operation */
    179#define NFS_OPTION_FSCACHE	0x00000001	/* - local caching enabled */
    180#define NFS_OPTION_MIGRATION	0x00000002	/* - NFSv4 migration enabled */
    181
    182	enum nfs4_change_attr_type
    183				change_attr_type;/* Description of change attribute */
    184
    185	struct nfs_fsid		fsid;
    186	__u64			maxfilesize;	/* maximum file size */
    187	struct timespec64	time_delta;	/* smallest time granularity */
    188	unsigned long		mount_time;	/* when this fs was mounted */
    189	struct super_block	*super;		/* VFS super block */
    190	dev_t			s_dev;		/* superblock dev numbers */
    191	struct nfs_auth_info	auth_info;	/* parsed auth flavors */
    192
    193#ifdef CONFIG_NFS_FSCACHE
    194	struct fscache_volume	*fscache;	/* superblock cookie */
    195	char			*fscache_uniq;	/* Uniquifier (or NULL) */
    196#endif
    197
    198	u32			pnfs_blksize;	/* layout_blksize attr */
    199#if IS_ENABLED(CONFIG_NFS_V4)
    200	u32			attr_bitmask[3];/* V4 bitmask representing the set
    201						   of attributes supported on this
    202						   filesystem */
    203	u32			attr_bitmask_nl[3];
    204						/* V4 bitmask representing the
    205						   set of attributes supported
    206						   on this filesystem excluding
    207						   the label support bit. */
    208	u32			exclcreat_bitmask[3];
    209						/* V4 bitmask representing the
    210						   set of attributes supported
    211						   on this filesystem for the
    212						   exclusive create. */
    213	u32			cache_consistency_bitmask[3];
    214						/* V4 bitmask representing the subset
    215						   of change attribute, size, ctime
    216						   and mtime attributes supported by
    217						   the server */
    218	u32			acl_bitmask;	/* V4 bitmask representing the ACEs
    219						   that are supported on this
    220						   filesystem */
    221	u32			fh_expire_type;	/* V4 bitmask representing file
    222						   handle volatility type for
    223						   this filesystem */
    224	struct pnfs_layoutdriver_type  *pnfs_curr_ld; /* Active layout driver */
    225	struct rpc_wait_queue	roc_rpcwaitq;
    226	void			*pnfs_ld_data;	/* per mount point data */
    227
    228	/* the following fields are protected by nfs_client->cl_lock */
    229	struct rb_root		state_owners;
    230#endif
    231	struct ida		openowner_id;
    232	struct ida		lockowner_id;
    233	struct list_head	state_owners_lru;
    234	struct list_head	layouts;
    235	struct list_head	delegations;
    236	struct list_head	ss_copies;
    237
    238	unsigned long		mig_gen;
    239	unsigned long		mig_status;
    240#define NFS_MIG_IN_TRANSITION		(1)
    241#define NFS_MIG_FAILED			(2)
    242#define NFS_MIG_TSM_POSSIBLE		(3)
    243
    244	void (*destroy)(struct nfs_server *);
    245
    246	atomic_t active; /* Keep trace of any activity to this server */
    247
    248	/* mountd-related mount options */
    249	struct sockaddr_storage	mountd_address;
    250	size_t			mountd_addrlen;
    251	u32			mountd_version;
    252	unsigned short		mountd_port;
    253	unsigned short		mountd_protocol;
    254	struct rpc_wait_queue	uoc_rpcwaitq;
    255
    256	/* XDR related information */
    257	unsigned int		read_hdrsize;
    258
    259	/* User namespace info */
    260	const struct cred	*cred;
    261	bool			has_sec_mnt_opts;
    262};
    263
    264/* Server capabilities */
    265#define NFS_CAP_READDIRPLUS	(1U << 0)
    266#define NFS_CAP_HARDLINKS	(1U << 1)
    267#define NFS_CAP_SYMLINKS	(1U << 2)
    268#define NFS_CAP_ACLS		(1U << 3)
    269#define NFS_CAP_ATOMIC_OPEN	(1U << 4)
    270#define NFS_CAP_LGOPEN		(1U << 5)
    271#define NFS_CAP_CASE_INSENSITIVE	(1U << 6)
    272#define NFS_CAP_CASE_PRESERVING	(1U << 7)
    273#define NFS_CAP_POSIX_LOCK	(1U << 14)
    274#define NFS_CAP_UIDGID_NOMAP	(1U << 15)
    275#define NFS_CAP_STATEID_NFSV41	(1U << 16)
    276#define NFS_CAP_ATOMIC_OPEN_V1	(1U << 17)
    277#define NFS_CAP_SECURITY_LABEL	(1U << 18)
    278#define NFS_CAP_SEEK		(1U << 19)
    279#define NFS_CAP_ALLOCATE	(1U << 20)
    280#define NFS_CAP_DEALLOCATE	(1U << 21)
    281#define NFS_CAP_LAYOUTSTATS	(1U << 22)
    282#define NFS_CAP_CLONE		(1U << 23)
    283#define NFS_CAP_COPY		(1U << 24)
    284#define NFS_CAP_OFFLOAD_CANCEL	(1U << 25)
    285#define NFS_CAP_LAYOUTERROR	(1U << 26)
    286#define NFS_CAP_COPY_NOTIFY	(1U << 27)
    287#define NFS_CAP_XATTR		(1U << 28)
    288#define NFS_CAP_READ_PLUS	(1U << 29)
    289#define NFS_CAP_FS_LOCATIONS	(1U << 30)
    290#define NFS_CAP_MOVEABLE	(1U << 31)
    291#endif