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