SUNRPC: Remove rpc_clnt->cl_count
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Thu, 14 Jun 2007 20:40:32 +0000 (16:40 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 11 Jul 2007 03:40:29 +0000 (23:40 -0400)
The kref now does most of what cl_count + cl_user used to do. The only
remaining role for cl_count is to tell us if we are in a 'shutdown'
phase. We can provide that information using a single bit field instead
of a full atomic counter.

Also rename rpc_destroy_client() to rpc_close_client(), which reflects
better what its role is these days.

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

index fe7ea65ed0aee830eb946251949e66b4b38e8ef5..cf03494c36e719b2c53a77773babb1ea2ba7f249 100644 (file)
@@ -25,7 +25,6 @@ struct rpc_inode;
  */
 struct rpc_clnt {
        struct kref             cl_kref;        /* Number of references */
-       atomic_t                cl_count;       /* Number of clones */
        struct list_head        cl_clients;     /* Global list of clients */
        struct list_head        cl_tasks;       /* List of tasks */
        spinlock_t              cl_lock;        /* spinlock */
@@ -119,8 +118,7 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args);
 struct rpc_clnt        *rpc_bind_new_program(struct rpc_clnt *,
                                struct rpc_program *, int);
 struct rpc_clnt *rpc_clone_client(struct rpc_clnt *);
-int            rpc_shutdown_client(struct rpc_clnt *);
-int            rpc_destroy_client(struct rpc_clnt *);
+void           rpc_shutdown_client(struct rpc_clnt *);
 void           rpc_release_client(struct rpc_clnt *);
 void           rpc_register_client(struct rpc_clnt *);
 void           rpc_unregister_client(struct rpc_clnt *);
index 613c10e4ac31f0a4710a290e18e0a0cdedf0685c..be5524d20822496c4e68aefbc07e116a7f6b25ea 100644 (file)
@@ -121,7 +121,6 @@ static struct rpc_clnt * rpc_new_client(struct rpc_xprt *xprt, char *servname, s
        clnt = kzalloc(sizeof(*clnt), GFP_KERNEL);
        if (!clnt)
                goto out_err;
-       atomic_set(&clnt->cl_count, 1);
        clnt->cl_parent = clnt;
 
        clnt->cl_server = clnt->cl_inline_name;
@@ -270,7 +269,6 @@ rpc_clone_client(struct rpc_clnt *clnt)
        new = kmemdup(clnt, sizeof(*new), GFP_KERNEL);
        if (!new)
                goto out_no_clnt;
-       atomic_set(&new->cl_count, 1);
        new->cl_metrics = rpc_alloc_iostats(clnt);
        if (new->cl_metrics == NULL)
                goto out_no_stats;
@@ -303,8 +301,7 @@ out_no_clnt:
  * Properly shut down an RPC client, terminating all outstanding
  * requests.
  */
-int
-rpc_shutdown_client(struct rpc_clnt *clnt)
+void rpc_shutdown_client(struct rpc_clnt *clnt)
 {
        dprintk("RPC:       shutting down %s client for %s\n",
                        clnt->cl_protname, clnt->cl_server);
@@ -315,7 +312,7 @@ rpc_shutdown_client(struct rpc_clnt *clnt)
                        list_empty(&clnt->cl_tasks), 1*HZ);
        }
 
-       return rpc_destroy_client(clnt);
+       rpc_release_client(clnt);
 }
 
 /*
@@ -363,18 +360,6 @@ rpc_release_client(struct rpc_clnt *clnt)
        kref_put(&clnt->cl_kref, rpc_free_client);
 }
 
-/*
- * Delete an RPC client
- */
-int
-rpc_destroy_client(struct rpc_clnt *clnt)
-{
-       if (!atomic_dec_and_test(&clnt->cl_count))
-               return 1;
-       kref_put(&clnt->cl_kref, rpc_free_client);
-       return 0;
-}
-
 /**
  * rpc_bind_new_program - bind a new RPC program to an existing client
  * @old - old rpc_client
index 00853a32649930b564191a96663c64c402d481ea..cf7db59cdcded7738315c9a71927cb5b30209497 100644 (file)
@@ -380,7 +380,7 @@ void rpcb_getport(struct rpc_task *task)
        }
 
        child = rpc_run_task(rpcb_clnt, RPC_TASK_ASYNC, &rpcb_getport_ops, map);
-       rpc_destroy_client(rpcb_clnt);
+       rpc_release_client(rpcb_clnt);
        if (IS_ERR(child)) {
                status = -EIO;
                dprintk("RPC: %5u rpcb_getport rpc_run_task failed\n",
index c46d31ca307b93defb087094dcc2893bd20e6efa..02e83e15fef5b5136c8e22f6952005aedbfc1278 100644 (file)
@@ -35,7 +35,6 @@ EXPORT_SYMBOL(rpc_wake_up_status);
 /* RPC client functions */
 EXPORT_SYMBOL(rpc_clone_client);
 EXPORT_SYMBOL(rpc_bind_new_program);
-EXPORT_SYMBOL(rpc_destroy_client);
 EXPORT_SYMBOL(rpc_shutdown_client);
 EXPORT_SYMBOL(rpc_killall_tasks);
 EXPORT_SYMBOL(rpc_call_sync);