aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2006-08-22 20:06:10 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-09-22 23:24:33 -0400
commit24c8dbbb5f777187d660393599641ab3307b4b97 (patch)
tree9d50fdd57c7593d925a21e4bb049095a4e4ead6f /include
parente9326dcab413848e70ab746c7c5363da13e5f801 (diff)
NFS: Generalise the nfs_client structure
Generalise the nfs_client structure by: (1) Moving nfs_client to a more general place (nfs_fs_sb.h). (2) Renaming its maintenance routines to be non-NFS4 specific. (3) Move those maintenance routines to a new non-NFS4 specific file (client.c) and move the declarations to internal.h. (4) Make nfs_find/get_client() take a full sockaddr_in to include the port number (will be required for NFS2/3). (5) Make nfs_find/get_client() take the NFS protocol version (again will be required to differentiate NFS2, 3 & 4 client records). Also: (6) Make nfs_client construction proceed akin to inodes, marking them as under construction and providing a function to indicate completion. (7) Make nfs_get_client() wait interruptibly if it finds a client that it can share, but that client is currently being constructed. (8) Make nfs4_create_client() use (6) and (7) instead of locking cl_sem. Signed-Off-By: David Howells <dhowells@redhat.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/nfs_fs.h1
-rw-r--r--include/linux/nfs_fs_sb.h60
2 files changed, 61 insertions, 0 deletions
diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
index a36e01cd6321..70e1dc9162e2 100644
--- a/include/linux/nfs_fs.h
+++ b/include/linux/nfs_fs.h
@@ -586,6 +586,7 @@ extern void * nfs_root_data(void);
586#define NFSDBG_FILE 0x0040 586#define NFSDBG_FILE 0x0040
587#define NFSDBG_ROOT 0x0080 587#define NFSDBG_ROOT 0x0080
588#define NFSDBG_CALLBACK 0x0100 588#define NFSDBG_CALLBACK 0x0100
589#define NFSDBG_CLIENT 0x0200
589#define NFSDBG_ALL 0xFFFF 590#define NFSDBG_ALL 0xFFFF
590 591
591#ifdef __KERNEL__ 592#ifdef __KERNEL__
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
index fc20d6b934fb..a727657e0ad3 100644
--- a/include/linux/nfs_fs_sb.h
+++ b/include/linux/nfs_fs_sb.h
@@ -7,6 +7,66 @@
7struct nfs_iostats; 7struct nfs_iostats;
8 8
9/* 9/*
10 * The nfs_client identifies our client state to the server.
11 */
12struct 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 struct sockaddr_in cl_addr; /* server identifier */
23 char * cl_hostname; /* hostname of server */
24 struct list_head cl_share_link; /* link in global client list */
25 struct list_head cl_superblocks; /* List of nfs_server structs */
26
27 struct rpc_clnt * cl_rpcclient;
28
29#ifdef CONFIG_NFS_V4
30 u64 cl_clientid; /* constant */
31 nfs4_verifier cl_confirm;
32 unsigned long cl_state;
33
34 u32 cl_lockowner_id;
35
36 /*
37 * The following rwsem ensures exclusive access to the server
38 * while we recover the state following a lease expiration.
39 */
40 struct rw_semaphore cl_sem;
41
42 struct list_head cl_delegations;
43 struct list_head cl_state_owners;
44 struct list_head cl_unused;
45 int cl_nunused;
46 spinlock_t cl_lock;
47
48 unsigned long cl_lease_time;
49 unsigned long cl_last_renewal;
50 struct work_struct cl_renewd;
51 struct work_struct cl_recoverd;
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[16];
65 unsigned char cl_id_uniquifier;
66#endif
67};
68
69/*
10 * NFS client parameters stored in the superblock. 70 * NFS client parameters stored in the superblock.
11 */ 71 */
12struct nfs_server { 72struct nfs_server {