NFS: Remove the redundant nfs_client->cl_nfsversion
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Fri, 14 Dec 2007 19:56:07 +0000 (14:56 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 30 Jan 2008 07:05:49 +0000 (02:05 -0500)
We can get the same information from the rpc_ops structure instead.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/client.c
fs/nfs/namespace.c
fs/nfs/super.c
include/linux/nfs_fs_sb.h

index ff778ecee0bdc14491b4338964d6a37a4cb613d3..3b21731ae571b8a32086ea567a4fbdf0cad755be 100644 (file)
@@ -96,7 +96,7 @@ struct rpc_program            nfsacl_program = {
 struct nfs_client_initdata {
        const char *hostname;
        const struct sockaddr_in *addr;
-       int version;
+       const struct nfs_rpc_ops *rpc_ops;
 };
 
 /*
@@ -112,7 +112,9 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_
        if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL)
                goto error_0;
 
-       if (cl_init->version == 4) {
+       clp->rpc_ops = cl_init->rpc_ops;
+
+       if (cl_init->rpc_ops->version == 4) {
                if (nfs_callback_up() < 0)
                        goto error_2;
                __set_bit(NFS_CS_CALLBACK, &clp->cl_res_state);
@@ -121,7 +123,6 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_
        atomic_set(&clp->cl_count, 1);
        clp->cl_cons_state = NFS_CS_INITING;
 
-       clp->cl_nfsversion = cl_init->version;
        memcpy(&clp->cl_addr, cl_init->addr, sizeof(clp->cl_addr));
 
        if (cl_init->hostname) {
@@ -170,7 +171,7 @@ static void nfs4_shutdown_client(struct nfs_client *clp)
  */
 static void nfs_free_client(struct nfs_client *clp)
 {
-       dprintk("--> nfs_free_client(%d)\n", clp->cl_nfsversion);
+       dprintk("--> nfs_free_client(%u)\n", clp->rpc_ops->version);
 
        nfs4_shutdown_client(clp);
 
@@ -222,7 +223,7 @@ struct nfs_client *nfs_find_client(const struct sockaddr_in *addr, int nfsversio
                        continue;
 
                /* Different NFS versions cannot share the same nfs_client */
-               if (clp->cl_nfsversion != nfsversion)
+               if (clp->rpc_ops->version != nfsversion)
                        continue;
 
                /* Match only the IP address, not the port number */
@@ -251,7 +252,7 @@ static struct nfs_client *nfs_match_client(const struct nfs_client_initdata *dat
                        continue;
 
                /* Different NFS versions cannot share the same nfs_client */
-               if (clp->cl_nfsversion != data->version)
+               if (clp->rpc_ops != data->rpc_ops)
                        continue;
 
                /* Match the full socket address */
@@ -273,9 +274,9 @@ static struct nfs_client *nfs_get_client(const struct nfs_client_initdata *cl_in
        struct nfs_client *clp, *new = NULL;
        int error;
 
-       dprintk("--> nfs_get_client(%s,"NIPQUAD_FMT":%d,%d)\n",
+       dprintk("--> nfs_get_client(%s,"NIPQUAD_FMT":%d,%u)\n",
                cl_init->hostname ?: "", NIPQUAD(cl_init->addr->sin_addr),
-               cl_init->addr->sin_port, cl_init->version);
+               cl_init->addr->sin_port, cl_init->rpc_ops->version);
 
        /* see if the client already exists */
        do {
@@ -430,7 +431,7 @@ static int nfs_start_lockd(struct nfs_server *server)
 {
        int error = 0;
 
-       if (server->nfs_client->cl_nfsversion > 3)
+       if (server->nfs_client->rpc_ops->version > 3)
                goto out;
        if (server->flags & NFS_MOUNT_NONLM)
                goto out;
@@ -450,7 +451,7 @@ out:
 #ifdef CONFIG_NFS_V3_ACL
 static void nfs_init_server_aclclient(struct nfs_server *server)
 {
-       if (server->nfs_client->cl_nfsversion != 3)
+       if (server->nfs_client->rpc_ops->version != 3)
                goto out_noacl;
        if (server->flags & NFS_MOUNT_NOACL)
                goto out_noacl;
@@ -521,12 +522,6 @@ static int nfs_init_client(struct nfs_client *clp,
                return 0;
        }
 
-       /* Check NFS protocol revision and initialize RPC op vector */
-       clp->rpc_ops = &nfs_v2_clientops;
-#ifdef CONFIG_NFS_V3
-       if (clp->cl_nfsversion == 3)
-               clp->rpc_ops = &nfs_v3_clientops;
-#endif
        /*
         * Create a client RPC handle for doing FSSTAT with UNIX auth only
         * - RFC 2623, sec 2.3.2
@@ -553,7 +548,7 @@ static int nfs_init_server(struct nfs_server *server,
        struct nfs_client_initdata cl_init = {
                .hostname = data->nfs_server.hostname,
                .addr = &data->nfs_server.address,
-               .version = 2,
+               .rpc_ops = &nfs_v2_clientops,
        };
        struct nfs_client *clp;
        int error;
@@ -562,7 +557,7 @@ static int nfs_init_server(struct nfs_server *server,
 
 #ifdef CONFIG_NFS_V3
        if (data->flags & NFS_MOUNT_VER3)
-               cl_init.version = 3;
+               cl_init.rpc_ops = &nfs_v3_clientops;
 #endif
 
        /* Allocate or find a client reference we can use */
@@ -906,7 +901,7 @@ static int nfs4_set_client(struct nfs_server *server,
        struct nfs_client_initdata cl_init = {
                .hostname = hostname,
                .addr = addr,
-               .version = 4,
+               .rpc_ops = &nfs_v4_clientops,
        };
        struct nfs_client *clp;
        int error;
@@ -1284,8 +1279,8 @@ static int nfs_server_list_show(struct seq_file *m, void *v)
        /* display one transport per line on subsequent lines */
        clp = list_entry(v, struct nfs_client, cl_share_link);
 
-       seq_printf(m, "v%d %02x%02x%02x%02x %4hx %3d %s\n",
-                  clp->cl_nfsversion,
+       seq_printf(m, "v%u %02x%02x%02x%02x %4hx %3d %s\n",
+                  clp->rpc_ops->version,
                   NIPQUAD(clp->cl_addr.sin_addr),
                   ntohs(clp->cl_addr.sin_port),
                   atomic_read(&clp->cl_count),
@@ -1363,8 +1358,8 @@ static int nfs_volume_list_show(struct seq_file *m, void *v)
                 (unsigned long long) server->fsid.major,
                 (unsigned long long) server->fsid.minor);
 
-       seq_printf(m, "v%d %02x%02x%02x%02x %4hx %-7s %-17s\n",
-                  clp->cl_nfsversion,
+       seq_printf(m, "v%u %02x%02x%02x%02x %4hx %-7s %-17s\n",
+                  clp->rpc_ops->version,
                   NIPQUAD(clp->cl_addr.sin_addr),
                   ntohs(clp->cl_addr.sin_port),
                   dev,
index acfc56f9edc04c53b25efaffeb80eb0ba9d887c5..be4ce1c3a3d8d30e19f9a1e5921253d6e6542589 100644 (file)
@@ -188,7 +188,7 @@ static struct vfsmount *nfs_do_clone_mount(struct nfs_server *server,
 {
 #ifdef CONFIG_NFS_V4
        struct vfsmount *mnt = NULL;
-       switch (server->nfs_client->cl_nfsversion) {
+       switch (server->nfs_client->rpc_ops->version) {
                case 2:
                case 3:
                        mnt = vfs_kern_mount(&nfs_xdev_fs_type, 0, devname, mountdata);
index a3492d6f8f9b37dd8197902574a31467ee5395e4..5608e6a4c1e11d7d38e5f2769e2834ba612b2135 100644 (file)
@@ -529,7 +529,7 @@ static int nfs_show_stats(struct seq_file *m, struct vfsmount *mnt)
        seq_printf(m, ",namelen=%d", nfss->namelen);
 
 #ifdef CONFIG_NFS_V4
-       if (nfss->nfs_client->cl_nfsversion == 4) {
+       if (nfss->nfs_client->rpc_ops->version == 4) {
                seq_printf(m, "\n\tnfsv4:\t");
                seq_printf(m, "bm0=0x%x", nfss->attr_bitmask[0]);
                seq_printf(m, ",bm1=0x%x", nfss->attr_bitmask[1]);
index 9f949b5876849451210e1c31316f7c3f67dafd80..97b3257566671a0e54b203db7c122f0c70e29fad 100644 (file)
@@ -17,7 +17,6 @@ struct nfs_client {
        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 */
-       int                     cl_nfsversion;  /* NFS protocol version */
        unsigned long           cl_res_state;   /* NFS resources state */
 #define NFS_CS_CALLBACK                1               /* - callback started */
 #define NFS_CS_IDMAP           2               /* - idmap started */