SUNRPC: Remove the rpc_client->cl_dentry
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 26 Aug 2013 21:44:26 +0000 (17:44 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sun, 1 Sep 2013 15:12:42 +0000 (11:12 -0400)
It is now redundant.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
include/linux/sunrpc/clnt.h
include/linux/sunrpc/rpc_pipe_fs.h
net/sunrpc/clnt.c
net/sunrpc/rpc_pipe.c

index 0dccd01ae2ded0651d4c0e501b7cd6acb4f2918d..76c0bf6ecd171eb6554b1760d2ec9b810887ccc7 100644 (file)
@@ -57,7 +57,6 @@ struct rpc_clnt {
        int                     cl_nodelen;     /* nodename length */
        char                    cl_nodename[UNX_MAXNODENAME];
        struct rpc_pipe_dir_head cl_pipedir_objects;
-       struct dentry *         cl_dentry;
        struct rpc_clnt *       cl_parent;      /* Points to parent of clones */
        struct rpc_rtt          cl_rtt_default;
        struct rpc_timeout      cl_timeout_default;
index 188e7fca67e195ded131fed3865cc678a4847b31..b0cf1812be727a82097b755a4dee213ae7459bb9 100644 (file)
@@ -94,7 +94,7 @@ extern int rpc_queue_upcall(struct rpc_pipe *, struct rpc_pipe_msg *);
 
 struct rpc_clnt;
 extern struct dentry *rpc_create_client_dir(struct dentry *, const char *, struct rpc_clnt *);
-extern int rpc_remove_client_dir(struct dentry *, struct rpc_clnt *);
+extern int rpc_remove_client_dir(struct rpc_clnt *);
 
 extern void rpc_init_pipe_dir_head(struct rpc_pipe_dir_head *pdh);
 extern void rpc_init_pipe_dir_object(struct rpc_pipe_dir_object *pdo,
index 3c074de902ea2bd1844a9dc293407528f146c817..af3f0cf7e278b8714116ad21c334e53dc0b1cc99 100644 (file)
@@ -102,9 +102,7 @@ static void rpc_unregister_client(struct rpc_clnt *clnt)
 
 static void __rpc_clnt_remove_pipedir(struct rpc_clnt *clnt)
 {
-       if (clnt->cl_dentry)
-               rpc_remove_client_dir(clnt->cl_dentry, clnt);
-       clnt->cl_dentry = NULL;
+       rpc_remove_client_dir(clnt);
 }
 
 static void rpc_clnt_remove_pipedir(struct rpc_clnt *clnt)
@@ -154,14 +152,11 @@ rpc_setup_pipedir(struct super_block *pipefs_sb, struct rpc_clnt *clnt)
 {
        struct dentry *dentry;
 
-       if (clnt->cl_program->pipe_dir_name == NULL)
-               goto out;
-       clnt->cl_dentry = NULL;
-       dentry = rpc_setup_pipedir_sb(pipefs_sb, clnt);
-       if (IS_ERR(dentry))
-               return PTR_ERR(dentry);
-       clnt->cl_dentry = dentry;
-out:
+       if (clnt->cl_program->pipe_dir_name != NULL) {
+               dentry = rpc_setup_pipedir_sb(pipefs_sb, clnt);
+               if (IS_ERR(dentry))
+                       return PTR_ERR(dentry);
+       }
        return 0;
 }
 
@@ -170,11 +165,18 @@ static int rpc_clnt_skip_event(struct rpc_clnt *clnt, unsigned long event)
        if (clnt->cl_program->pipe_dir_name == NULL)
                return 1;
 
-       if (((event == RPC_PIPEFS_MOUNT) && clnt->cl_dentry) ||
-           ((event == RPC_PIPEFS_UMOUNT) && !clnt->cl_dentry))
-               return 1;
-       if ((event == RPC_PIPEFS_MOUNT) && atomic_read(&clnt->cl_count) == 0)
-               return 1;
+       switch (event) {
+       case RPC_PIPEFS_MOUNT:
+               if (clnt->cl_pipedir_objects.pdh_dentry != NULL)
+                       return 1;
+               if (atomic_read(&clnt->cl_count) == 0)
+                       return 1;
+               break;
+       case RPC_PIPEFS_UMOUNT:
+               if (clnt->cl_pipedir_objects.pdh_dentry == NULL)
+                       return 1;
+               break;
+       }
        return 0;
 }
 
@@ -191,7 +193,6 @@ static int __rpc_clnt_handle_event(struct rpc_clnt *clnt, unsigned long event,
                        return -ENOENT;
                if (IS_ERR(dentry))
                        return PTR_ERR(dentry);
-               clnt->cl_dentry = dentry;
                break;
        case RPC_PIPEFS_UMOUNT:
                __rpc_clnt_remove_pipedir(clnt);
index cfeba77de5672e51ab9ac7db01912ab110cd10ff..a35b2f402aaa9e9d702e684b581f910558f4d6a2 100644 (file)
@@ -1055,15 +1055,16 @@ struct dentry *rpc_create_client_dir(struct dentry *dentry,
 
 /**
  * rpc_remove_client_dir - Remove a directory created with rpc_create_client_dir()
- * @dentry: dentry for the pipe
  * @rpc_client: rpc_client for the pipe
  */
-int rpc_remove_client_dir(struct dentry *dentry, struct rpc_clnt *rpc_client)
+int rpc_remove_client_dir(struct rpc_clnt *rpc_client)
 {
-       if (rpc_client->cl_pipedir_objects.pdh_dentry) {
-               rpc_destroy_pipe_dir_objects(&rpc_client->cl_pipedir_objects);
-               rpc_client->cl_pipedir_objects.pdh_dentry = NULL;
-       }
+       struct dentry *dentry = rpc_client->cl_pipedir_objects.pdh_dentry;
+
+       if (dentry == NULL)
+               return 0;
+       rpc_destroy_pipe_dir_objects(&rpc_client->cl_pipedir_objects);
+       rpc_client->cl_pipedir_objects.pdh_dentry = NULL;
        return rpc_rmdir_depopulate(dentry, rpc_clntdir_depopulate);
 }