Blame view

include/linux/nfs_fs_sb.h 6.72 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
  #ifndef _NFS_FS_SB
  #define _NFS_FS_SB
  
  #include <linux/list.h>
  #include <linux/backing-dev.h>
ef818a28f   Steve Dickson   NFS: Stop sillyna...
6
  #include <linux/wait.h>
557134a39   Andy Adamson   nfs41: sessions c...
7
8
  #include <linux/nfs_xdr.h>
  #include <linux/sunrpc/xprt.h>
ef818a28f   Steve Dickson   NFS: Stop sillyna...
9
10
  
  #include <asm/atomic.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11

557134a39   Andy Adamson   nfs41: sessions c...
12
  struct nfs4_session;
d9ef5a8c2   Chuck Lever   NFS: introduce me...
13
  struct nfs_iostats;
9289e7f91   Chuck Lever   NFS: Invoke nlmcl...
14
  struct nlm_host;
cccef3b96   Andy Adamson   nfs41: introduce ...
15
16
17
  struct nfs4_sequence_args;
  struct nfs4_sequence_res;
  struct nfs_server;
97dc13594   Trond Myklebust   NFSv41: Clean up ...
18
  struct nfs4_minor_version_ops;
d9ef5a8c2   Chuck Lever   NFS: introduce me...
19

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
  /*
24c8dbbb5   David Howells   NFS: Generalise t...
21
22
23
24
25
26
27
   * The nfs_client identifies our client state to the server.
   */
  struct nfs_client {
  	atomic_t		cl_count;
  	int			cl_cons_state;	/* current construction state (-ve: init error) */
  #define NFS_CS_READY		0		/* ready to be used */
  #define NFS_CS_INITING		1		/* busy initialising */
76db6d950   Andy Adamson   nfs41: add sessio...
28
  #define NFS_CS_SESSION_INITING	2		/* busy initialising  session */
24c8dbbb5   David Howells   NFS: Generalise t...
29
  	unsigned long		cl_res_state;	/* NFS resources state */
24c8dbbb5   David Howells   NFS: Generalise t...
30
31
  #define NFS_CS_CALLBACK		1		/* - callback started */
  #define NFS_CS_IDMAP		2		/* - idmap started */
5dd3177ae   Trond Myklebust   NFSv4: Fix a use-...
32
  #define NFS_CS_RENEWD		3		/* - renewd started */
6e4cffd7b   Chuck Lever   NFS: Expand serve...
33
34
  	struct sockaddr_storage	cl_addr;	/* server identifier */
  	size_t			cl_addrlen;
24c8dbbb5   David Howells   NFS: Generalise t...
35
36
37
38
39
  	char *			cl_hostname;	/* hostname of server */
  	struct list_head	cl_share_link;	/* link in global client list */
  	struct list_head	cl_superblocks;	/* List of nfs_server structs */
  
  	struct rpc_clnt *	cl_rpcclient;
8fa5c000d   David Howells   NFS: Move rpc_ops...
40
  	const struct nfs_rpc_ops *rpc_ops;	/* NFS protocol vector */
59dca3b28   Trond Myklebust   NFS: Fix the 'pro...
41
  	int			cl_proto;	/* Network transport protocol */
24c8dbbb5   David Howells   NFS: Generalise t...
42

94a417f3d   Benny Halevy   nfs41: nfs_client...
43
  	u32			cl_minorversion;/* NFSv4 minorversion */
7c67db3a8   Trond Myklebust   NFSv4: Reintroduc...
44
  	struct rpc_cred		*cl_machine_cred;
24c8dbbb5   David Howells   NFS: Generalise t...
45
46
  #ifdef CONFIG_NFS_V4
  	u64			cl_clientid;	/* constant */
24c8dbbb5   David Howells   NFS: Generalise t...
47
  	unsigned long		cl_state;
9f958ab88   Trond Myklebust   NFSv4: Reduce the...
48
49
  	struct rb_root		cl_openowner_id;
  	struct rb_root		cl_lockowner_id;
24c8dbbb5   David Howells   NFS: Generalise t...
50

24c8dbbb5   David Howells   NFS: Generalise t...
51
  	struct list_head	cl_delegations;
9f958ab88   Trond Myklebust   NFSv4: Reduce the...
52
  	struct rb_root		cl_state_owners;
24c8dbbb5   David Howells   NFS: Generalise t...
53
54
55
56
  	spinlock_t		cl_lock;
  
  	unsigned long		cl_lease_time;
  	unsigned long		cl_last_renewal;
52bad64d9   David Howells   WorkStruct: Separ...
57
  	struct delayed_work	cl_renewd;
24c8dbbb5   David Howells   NFS: Generalise t...
58
59
60
61
62
63
64
65
66
67
68
69
  
  	struct rpc_wait_queue	cl_rpcwaitq;
  
  	/* used for the setclientid verifier */
  	struct timespec		cl_boot_time;
  
  	/* idmapper */
  	struct idmap *		cl_idmap;
  
  	/* Our own IP address, as a null-terminated string.
  	 * This is used to generate the clientid, and the callback address.
  	 */
4392f2592   Chuck Lever   NFS: Increase siz...
70
  	char			cl_ipaddr[48];
24c8dbbb5   David Howells   NFS: Generalise t...
71
  	unsigned char		cl_id_uniquifier;
97dc13594   Trond Myklebust   NFSv41: Clean up ...
72
  	const struct nfs4_minor_version_ops *cl_mvops;
94a417f3d   Benny Halevy   nfs41: nfs_client...
73
  #endif /* CONFIG_NFS_V4 */
147272813   David Howells   NFS: Define and c...
74

557134a39   Andy Adamson   nfs41: sessions c...
75
  #ifdef CONFIG_NFS_V4_1
99fe60d06   Benny Halevy   nfs41: exchange_i...
76
77
78
79
80
81
  	/* clientid returned from EXCHANGE_ID, used by session operations */
  	u64			cl_ex_clid;
  	/* The sequence id to use for the next CREATE_SESSION */
  	u32			cl_seqid;
  	/* The flags used for obtaining the clientid during EXCHANGE_ID */
  	u32			cl_exchange_flags;
557134a39   Andy Adamson   nfs41: sessions c...
82
83
  	struct nfs4_session	*cl_session; 	/* sharred session */
  #endif /* CONFIG_NFS_V4_1 */
147272813   David Howells   NFS: Define and c...
84
85
86
  #ifdef CONFIG_NFS_FSCACHE
  	struct fscache_cookie	*fscache;	/* client index cache cookie */
  #endif
24c8dbbb5   David Howells   NFS: Generalise t...
87
88
89
  };
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
90
91
92
   * NFS client parameters stored in the superblock.
   */
  struct nfs_server {
27951bd26   David Howells   NFS: Maintain a c...
93
  	struct nfs_client *	nfs_client;	/* shared client and NFS4 state */
54ceac451   David Howells   NFS: Share NFS su...
94
95
96
97
  	struct list_head	client_link;	/* List of other nfs_server structs
  						 * that share the same client
  						 */
  	struct list_head	master_link;	/* link in master servers list */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
98
  	struct rpc_clnt *	client;		/* RPC client handle */
b7fa0554c   Andreas Gruenbacher   [PATCH] NFS: Add ...
99
  	struct rpc_clnt *	client_acl;	/* ACL RPC client handle */
9289e7f91   Chuck Lever   NFS: Invoke nlmcl...
100
  	struct nlm_host		*nlm_host;	/* NLM client handle */
003cb608a   Tejun Heo   percpu: add __per...
101
  	struct nfs_iostats __percpu *io_stats;	/* I/O statistics */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
102
  	struct backing_dev_info	backing_dev_info;
277866a0e   Peter Zijlstra   nfs: fix congesti...
103
  	atomic_long_t		writeback;	/* number of writeback pages */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
104
105
106
107
108
109
110
111
  	int			flags;		/* various flags */
  	unsigned int		caps;		/* server capabilities */
  	unsigned int		rsize;		/* read size */
  	unsigned int		rpages;		/* read size (in pages) */
  	unsigned int		wsize;		/* write size */
  	unsigned int		wpages;		/* write size (in pages) */
  	unsigned int		wtmult;		/* server disk block size */
  	unsigned int		dtsize;		/* readdir size */
f22d6d79f   Chuck Lever   NFS: Save the val...
112
  	unsigned short		port;		/* "port=" setting */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
113
114
115
116
117
118
  	unsigned int		bsize;		/* server block size */
  	unsigned int		acregmin;	/* attr cache timeouts */
  	unsigned int		acregmax;
  	unsigned int		acdirmin;
  	unsigned int		acdirmax;
  	unsigned int		namelen;
c6a6f19e2   David Howells   NFS: Add FS-Cache...
119
120
  	unsigned int		options;	/* extra options enabled by mount */
  #define NFS_OPTION_FSCACHE	0x00000001	/* - local caching enabled */
54ceac451   David Howells   NFS: Share NFS su...
121

8b4bdcf89   Trond Myklebust   NFS: Store the fi...
122
  	struct nfs_fsid		fsid;
54ceac451   David Howells   NFS: Share NFS su...
123
  	__u64			maxfilesize;	/* maximum file size */
67ec9f46b   Chuck Lever   NFS: report how l...
124
  	unsigned long		mount_time;	/* when this fs was mounted */
54ceac451   David Howells   NFS: Share NFS su...
125
  	dev_t			s_dev;		/* superblock dev numbers */
08734048b   David Howells   NFS: Define and c...
126
127
128
129
  #ifdef CONFIG_NFS_FSCACHE
  	struct nfs_fscache_key	*fscache_key;	/* unique key for superblock */
  	struct fscache_cookie	*fscache;	/* superblock cookie */
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
130
  #ifdef CONFIG_NFS_V4
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
133
  	u32			attr_bitmask[2];/* V4 bitmask representing the set
  						   of attributes supported on this
  						   filesystem */
a65318bf3   Trond Myklebust   NFSv4: Simplify s...
134
135
136
137
138
  	u32			cache_consistency_bitmask[2];
  						/* V4 bitmask representing the subset
  						   of change attribute, size, ctime
  						   and mtime attributes supported by
  						   the server */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
139
140
141
142
  	u32			acl_bitmask;	/* V4 bitmask representing the ACEs
  						   that are supported on this
  						   filesystem */
  #endif
54ceac451   David Howells   NFS: Share NFS su...
143
  	void (*destroy)(struct nfs_server *);
ef818a28f   Steve Dickson   NFS: Stop sillyna...
144
145
  
  	atomic_t active; /* Keep trace of any activity to this server */
3f8400d1f   Chuck Lever   NFS: Save the val...
146
147
148
149
150
151
152
  
  	/* mountd-related mount options */
  	struct sockaddr_storage	mountd_address;
  	size_t			mountd_addrlen;
  	u32			mountd_version;
  	unsigned short		mountd_port;
  	unsigned short		mountd_protocol;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
153
154
155
156
157
158
159
160
  };
  
  /* Server capabilities */
  #define NFS_CAP_READDIRPLUS	(1U << 0)
  #define NFS_CAP_HARDLINKS	(1U << 1)
  #define NFS_CAP_SYMLINKS	(1U << 2)
  #define NFS_CAP_ACLS		(1U << 3)
  #define NFS_CAP_ATOMIC_OPEN	(1U << 4)
62ab460cf   Trond Myklebust   NFSv4: Add 'serve...
161
162
163
164
165
166
167
168
169
  #define NFS_CAP_CHANGE_ATTR	(1U << 5)
  #define NFS_CAP_FILEID		(1U << 6)
  #define NFS_CAP_MODE		(1U << 7)
  #define NFS_CAP_NLINK		(1U << 8)
  #define NFS_CAP_OWNER		(1U << 9)
  #define NFS_CAP_OWNER_GROUP	(1U << 10)
  #define NFS_CAP_ATIME		(1U << 11)
  #define NFS_CAP_CTIME		(1U << 12)
  #define NFS_CAP_MTIME		(1U << 13)
0df5dd4aa   Trond Myklebust   NFSv4: fix delega...
170
  #define NFS_CAP_POSIX_LOCK	(1U << 14)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
171

557134a39   Andy Adamson   nfs41: sessions c...
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
  
  /* maximum number of slots to use */
  #define NFS4_MAX_SLOT_TABLE RPC_MAX_SLOT_TABLE
  
  #if defined(CONFIG_NFS_V4_1)
  
  /* Sessions */
  #define SLOT_TABLE_SZ (NFS4_MAX_SLOT_TABLE/(8*sizeof(long)))
  struct nfs4_slot_table {
  	struct nfs4_slot *slots;		/* seqid per slot */
  	unsigned long   used_slots[SLOT_TABLE_SZ]; /* used/unused bitmap */
  	spinlock_t	slot_tbl_lock;
  	struct rpc_wait_queue	slot_tbl_waitq;	/* allocators may wait here */
  	int		max_slots;		/* # slots in table */
  	int		highest_used_slotid;	/* sent to server on each SEQ.
  						 * op for dynamic resizing */
b9efa1b27   Andy Adamson   nfs41: implement ...
188
189
  	int		target_max_slots;	/* Set by CB_RECALL_SLOT as
  						 * the new max_slots */
557134a39   Andy Adamson   nfs41: sessions c...
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
  };
  
  static inline int slot_idx(struct nfs4_slot_table *tbl, struct nfs4_slot *sp)
  {
  	return sp - tbl->slots;
  }
  
  /*
   * Session related parameters
   */
  struct nfs4_session {
  	struct nfs4_sessionid		sess_id;
  	u32				flags;
  	unsigned long			session_state;
  	u32				hash_alg;
  	u32				ssv_len;
ea028ac92   Andy Adamson   nfs41: nfs41: fix...
206
  	struct completion		complete;
557134a39   Andy Adamson   nfs41: sessions c...
207
208
209
210
211
  
  	/* The fore and back channel */
  	struct nfs4_channel_attrs	fc_attrs;
  	struct nfs4_slot_table		fc_slot_table;
  	struct nfs4_channel_attrs	bc_attrs;
f8625a6a4   Ricardo Labiaga   nfs41: Backchanne...
212
  	struct nfs4_slot_table		bc_slot_table;
557134a39   Andy Adamson   nfs41: sessions c...
213
214
215
216
  	struct nfs_client		*clp;
  };
  
  #endif /* CONFIG_NFS_V4_1 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
217
  #endif