xref: /linux-6.15/include/linux/nfs_fs_sb.h (revision ba6e8564)
1 #ifndef _NFS_FS_SB
2 #define _NFS_FS_SB
3 
4 #include <linux/list.h>
5 #include <linux/backing-dev.h>
6 
7 struct nfs_iostats;
8 
9 /*
10  * The nfs_client identifies our client state to the server.
11  */
12 struct nfs_client {
13 	atomic_t		cl_count;
14 	int			cl_cons_state;	/* current construction state (-ve: init error) */
15 #define NFS_CS_READY		0		/* ready to be used */
16 #define NFS_CS_INITING		1		/* busy initialising */
17 	int			cl_nfsversion;	/* NFS protocol version */
18 	unsigned long		cl_res_state;	/* NFS resources state */
19 #define NFS_CS_RPCIOD		0		/* - rpciod started */
20 #define NFS_CS_CALLBACK		1		/* - callback started */
21 #define NFS_CS_IDMAP		2		/* - idmap started */
22 #define NFS_CS_RENEWD		3		/* - renewd started */
23 	struct sockaddr_in	cl_addr;	/* server identifier */
24 	char *			cl_hostname;	/* hostname of server */
25 	struct list_head	cl_share_link;	/* link in global client list */
26 	struct list_head	cl_superblocks;	/* List of nfs_server structs */
27 
28 	struct rpc_clnt *	cl_rpcclient;
29 	const struct nfs_rpc_ops *rpc_ops;	/* NFS protocol vector */
30 	unsigned long		retrans_timeo;	/* retransmit timeout */
31 	unsigned int		retrans_count;	/* number of retransmit tries */
32 
33 #ifdef CONFIG_NFS_V4
34 	u64			cl_clientid;	/* constant */
35 	nfs4_verifier		cl_confirm;
36 	unsigned long		cl_state;
37 
38 	u32			cl_lockowner_id;
39 
40 	/*
41 	 * The following rwsem ensures exclusive access to the server
42 	 * while we recover the state following a lease expiration.
43 	 */
44 	struct rw_semaphore	cl_sem;
45 
46 	struct list_head	cl_delegations;
47 	struct list_head	cl_state_owners;
48 	struct list_head	cl_unused;
49 	int			cl_nunused;
50 	spinlock_t		cl_lock;
51 
52 	unsigned long		cl_lease_time;
53 	unsigned long		cl_last_renewal;
54 	struct delayed_work	cl_renewd;
55 
56 	struct rpc_wait_queue	cl_rpcwaitq;
57 
58 	/* used for the setclientid verifier */
59 	struct timespec		cl_boot_time;
60 
61 	/* idmapper */
62 	struct idmap *		cl_idmap;
63 
64 	/* Our own IP address, as a null-terminated string.
65 	 * This is used to generate the clientid, and the callback address.
66 	 */
67 	char			cl_ipaddr[16];
68 	unsigned char		cl_id_uniquifier;
69 #endif
70 };
71 
72 /*
73  * NFS client parameters stored in the superblock.
74  */
75 struct nfs_server {
76 	struct nfs_client *	nfs_client;	/* shared client and NFS4 state */
77 	struct list_head	client_link;	/* List of other nfs_server structs
78 						 * that share the same client
79 						 */
80 	struct list_head	master_link;	/* link in master servers list */
81 	struct rpc_clnt *	client;		/* RPC client handle */
82 	struct rpc_clnt *	client_acl;	/* ACL RPC client handle */
83 	struct nfs_iostats *	io_stats;	/* I/O statistics */
84 	struct backing_dev_info	backing_dev_info;
85 	atomic_t		writeback;	/* number of writeback pages */
86 	int			flags;		/* various flags */
87 	unsigned int		caps;		/* server capabilities */
88 	unsigned int		rsize;		/* read size */
89 	unsigned int		rpages;		/* read size (in pages) */
90 	unsigned int		wsize;		/* write size */
91 	unsigned int		wpages;		/* write size (in pages) */
92 	unsigned int		wtmult;		/* server disk block size */
93 	unsigned int		dtsize;		/* readdir size */
94 	unsigned int		bsize;		/* server block size */
95 	unsigned int		acregmin;	/* attr cache timeouts */
96 	unsigned int		acregmax;
97 	unsigned int		acdirmin;
98 	unsigned int		acdirmax;
99 	unsigned int		namelen;
100 
101 	struct nfs_fsid		fsid;
102 	__u64			maxfilesize;	/* maximum file size */
103 	unsigned long		mount_time;	/* when this fs was mounted */
104 	dev_t			s_dev;		/* superblock dev numbers */
105 
106 #ifdef CONFIG_NFS_V4
107 	u32			attr_bitmask[2];/* V4 bitmask representing the set
108 						   of attributes supported on this
109 						   filesystem */
110 	u32			acl_bitmask;	/* V4 bitmask representing the ACEs
111 						   that are supported on this
112 						   filesystem */
113 #endif
114 	void (*destroy)(struct nfs_server *);
115 };
116 
117 /* Server capabilities */
118 #define NFS_CAP_READDIRPLUS	(1U << 0)
119 #define NFS_CAP_HARDLINKS	(1U << 1)
120 #define NFS_CAP_SYMLINKS	(1U << 2)
121 #define NFS_CAP_ACLS		(1U << 3)
122 #define NFS_CAP_ATOMIC_OPEN	(1U << 4)
123 
124 #endif
125