| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _NFS_FS_SB | 
 | 2 | #define _NFS_FS_SB | 
 | 3 |  | 
 | 4 | #include <linux/list.h> | 
 | 5 | #include <linux/backing-dev.h> | 
| Steve Dickson | ef818a2 | 2007-11-08 04:05:04 -0500 | [diff] [blame] | 6 | #include <linux/wait.h> | 
 | 7 |  | 
 | 8 | #include <asm/atomic.h> | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 9 |  | 
| Chuck Lever | d9ef5a8 | 2006-03-20 13:44:13 -0500 | [diff] [blame] | 10 | struct nfs_iostats; | 
| Chuck Lever | 9289e7f | 2008-01-11 17:09:52 -0500 | [diff] [blame] | 11 | struct nlm_host; | 
| Chuck Lever | d9ef5a8 | 2006-03-20 13:44:13 -0500 | [diff] [blame] | 12 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 13 | /* | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 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 */ | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 21 | 	unsigned long		cl_res_state;	/* NFS resources state */ | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 22 | #define NFS_CS_CALLBACK		1		/* - callback started */ | 
 | 23 | #define NFS_CS_IDMAP		2		/* - idmap started */ | 
| Trond Myklebust | 5dd3177 | 2006-08-24 01:03:05 -0400 | [diff] [blame] | 24 | #define NFS_CS_RENEWD		3		/* - renewd started */ | 
| Chuck Lever | 6e4cffd | 2007-12-10 14:58:15 -0500 | [diff] [blame] | 25 | 	struct sockaddr_storage	cl_addr;	/* server identifier */ | 
 | 26 | 	size_t			cl_addrlen; | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 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; | 
| David Howells | 8fa5c00 | 2006-08-22 20:06:12 -0400 | [diff] [blame] | 32 | 	const struct nfs_rpc_ops *rpc_ops;	/* NFS protocol vector */ | 
| Trond Myklebust | 59dca3b | 2008-01-03 16:29:06 -0500 | [diff] [blame] | 33 | 	int			cl_proto;	/* Network transport protocol */ | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 34 |  | 
| Trond Myklebust | 7c67db3 | 2008-04-07 20:50:11 -0400 | [diff] [blame] | 35 | 	struct rpc_cred		*cl_machine_cred; | 
 | 36 |  | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 37 | #ifdef CONFIG_NFS_V4 | 
 | 38 | 	u64			cl_clientid;	/* constant */ | 
 | 39 | 	nfs4_verifier		cl_confirm; | 
 | 40 | 	unsigned long		cl_state; | 
 | 41 |  | 
| Trond Myklebust | 9f958ab | 2007-07-02 13:58:33 -0400 | [diff] [blame] | 42 | 	struct rb_root		cl_openowner_id; | 
 | 43 | 	struct rb_root		cl_lockowner_id; | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 44 |  | 
 | 45 | 	/* | 
 | 46 | 	 * The following rwsem ensures exclusive access to the server | 
 | 47 | 	 * while we recover the state following a lease expiration. | 
 | 48 | 	 */ | 
 | 49 | 	struct rw_semaphore	cl_sem; | 
 | 50 |  | 
 | 51 | 	struct list_head	cl_delegations; | 
| Trond Myklebust | 9f958ab | 2007-07-02 13:58:33 -0400 | [diff] [blame] | 52 | 	struct rb_root		cl_state_owners; | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 53 | 	spinlock_t		cl_lock; | 
 | 54 |  | 
 | 55 | 	unsigned long		cl_lease_time; | 
 | 56 | 	unsigned long		cl_last_renewal; | 
| David Howells | 52bad64 | 2006-11-22 14:54:01 +0000 | [diff] [blame] | 57 | 	struct delayed_work	cl_renewd; | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 58 |  | 
 | 59 | 	struct rpc_wait_queue	cl_rpcwaitq; | 
 | 60 |  | 
 | 61 | 	/* used for the setclientid verifier */ | 
 | 62 | 	struct timespec		cl_boot_time; | 
 | 63 |  | 
 | 64 | 	/* idmapper */ | 
 | 65 | 	struct idmap *		cl_idmap; | 
 | 66 |  | 
 | 67 | 	/* Our own IP address, as a null-terminated string. | 
 | 68 | 	 * This is used to generate the clientid, and the callback address. | 
 | 69 | 	 */ | 
| Chuck Lever | 4392f25 | 2007-12-10 14:57:01 -0500 | [diff] [blame] | 70 | 	char			cl_ipaddr[48]; | 
| David Howells | 24c8dbb | 2006-08-22 20:06:10 -0400 | [diff] [blame] | 71 | 	unsigned char		cl_id_uniquifier; | 
 | 72 | #endif | 
 | 73 | }; | 
 | 74 |  | 
 | 75 | /* | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 76 |  * NFS client parameters stored in the superblock. | 
 | 77 |  */ | 
 | 78 | struct nfs_server { | 
| David Howells | 27951bd | 2006-08-22 20:06:11 -0400 | [diff] [blame] | 79 | 	struct nfs_client *	nfs_client;	/* shared client and NFS4 state */ | 
| David Howells | 54ceac4 | 2006-08-22 20:06:13 -0400 | [diff] [blame] | 80 | 	struct list_head	client_link;	/* List of other nfs_server structs | 
 | 81 | 						 * that share the same client | 
 | 82 | 						 */ | 
 | 83 | 	struct list_head	master_link;	/* link in master servers list */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 84 | 	struct rpc_clnt *	client;		/* RPC client handle */ | 
| Andreas Gruenbacher | b7fa055 | 2005-06-22 17:16:27 +0000 | [diff] [blame] | 85 | 	struct rpc_clnt *	client_acl;	/* ACL RPC client handle */ | 
| Chuck Lever | 9289e7f | 2008-01-11 17:09:52 -0500 | [diff] [blame] | 86 | 	struct nlm_host		*nlm_host;	/* NLM client handle */ | 
| Chuck Lever | d9ef5a8 | 2006-03-20 13:44:13 -0500 | [diff] [blame] | 87 | 	struct nfs_iostats *	io_stats;	/* I/O statistics */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 88 | 	struct backing_dev_info	backing_dev_info; | 
| Peter Zijlstra | 277866a | 2007-05-08 00:35:12 -0700 | [diff] [blame] | 89 | 	atomic_long_t		writeback;	/* number of writeback pages */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 90 | 	int			flags;		/* various flags */ | 
 | 91 | 	unsigned int		caps;		/* server capabilities */ | 
 | 92 | 	unsigned int		rsize;		/* read size */ | 
 | 93 | 	unsigned int		rpages;		/* read size (in pages) */ | 
 | 94 | 	unsigned int		wsize;		/* write size */ | 
 | 95 | 	unsigned int		wpages;		/* write size (in pages) */ | 
 | 96 | 	unsigned int		wtmult;		/* server disk block size */ | 
 | 97 | 	unsigned int		dtsize;		/* readdir size */ | 
| Chuck Lever | f22d6d7 | 2008-03-14 14:10:22 -0400 | [diff] [blame] | 98 | 	unsigned short		port;		/* "port=" setting */ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 99 | 	unsigned int		bsize;		/* server block size */ | 
 | 100 | 	unsigned int		acregmin;	/* attr cache timeouts */ | 
 | 101 | 	unsigned int		acregmax; | 
 | 102 | 	unsigned int		acdirmin; | 
 | 103 | 	unsigned int		acdirmax; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 104 | 	unsigned int		namelen; | 
| David Howells | 54ceac4 | 2006-08-22 20:06:13 -0400 | [diff] [blame] | 105 |  | 
| Trond Myklebust | 8b4bdcf | 2006-06-09 09:34:19 -0400 | [diff] [blame] | 106 | 	struct nfs_fsid		fsid; | 
| David Howells | 54ceac4 | 2006-08-22 20:06:13 -0400 | [diff] [blame] | 107 | 	__u64			maxfilesize;	/* maximum file size */ | 
| Chuck Lever | 67ec9f4 | 2006-03-20 13:44:15 -0500 | [diff] [blame] | 108 | 	unsigned long		mount_time;	/* when this fs was mounted */ | 
| David Howells | 54ceac4 | 2006-08-22 20:06:13 -0400 | [diff] [blame] | 109 | 	dev_t			s_dev;		/* superblock dev numbers */ | 
 | 110 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 111 | #ifdef CONFIG_NFS_V4 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 112 | 	u32			attr_bitmask[2];/* V4 bitmask representing the set | 
 | 113 | 						   of attributes supported on this | 
 | 114 | 						   filesystem */ | 
 | 115 | 	u32			acl_bitmask;	/* V4 bitmask representing the ACEs | 
 | 116 | 						   that are supported on this | 
 | 117 | 						   filesystem */ | 
 | 118 | #endif | 
| David Howells | 54ceac4 | 2006-08-22 20:06:13 -0400 | [diff] [blame] | 119 | 	void (*destroy)(struct nfs_server *); | 
| Steve Dickson | ef818a2 | 2007-11-08 04:05:04 -0500 | [diff] [blame] | 120 |  | 
 | 121 | 	atomic_t active; /* Keep trace of any activity to this server */ | 
 | 122 | 	wait_queue_head_t active_wq;  /* Wait for any activity to stop  */ | 
| Chuck Lever | 3f8400d | 2008-03-14 14:10:30 -0400 | [diff] [blame] | 123 |  | 
 | 124 | 	/* mountd-related mount options */ | 
 | 125 | 	struct sockaddr_storage	mountd_address; | 
 | 126 | 	size_t			mountd_addrlen; | 
 | 127 | 	u32			mountd_version; | 
 | 128 | 	unsigned short		mountd_port; | 
 | 129 | 	unsigned short		mountd_protocol; | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 130 | }; | 
 | 131 |  | 
 | 132 | /* Server capabilities */ | 
 | 133 | #define NFS_CAP_READDIRPLUS	(1U << 0) | 
 | 134 | #define NFS_CAP_HARDLINKS	(1U << 1) | 
 | 135 | #define NFS_CAP_SYMLINKS	(1U << 2) | 
 | 136 | #define NFS_CAP_ACLS		(1U << 3) | 
 | 137 | #define NFS_CAP_ATOMIC_OPEN	(1U << 4) | 
 | 138 |  | 
 | 139 | #endif |