summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2007-06-10 01:39:12 +0200
committerTrond Myklebust <Trond.Myklebust@netapp.com>2007-07-11 05:40:29 +0200
commit848f1fe6be2e290691bb6c13cbb8fd92bd0cfaab (patch)
treed653340b5e0c8c6ce393e67b11d8958fab4b05e4
parentSUNRPC: Convert rpc_clnt->cl_users to a kref (diff)
downloadlinux-848f1fe6be2e290691bb6c13cbb8fd92bd0cfaab.tar.xz
linux-848f1fe6be2e290691bb6c13cbb8fd92bd0cfaab.zip
SUNRPC: Kill rpc_clnt->cl_dead
Its use is at best racy, and there is only one user (lockd), which has additional locking that makes the whole thing redundant. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--include/linux/sunrpc/clnt.h3
-rw-r--r--net/sunrpc/clnt.c18
2 files changed, 4 insertions, 17 deletions
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
index 003d8ea70c19..ab3ef6d629a7 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -45,8 +45,7 @@ struct rpc_clnt {
cl_intr : 1,/* interruptible */
cl_discrtry : 1,/* disconnect before retry */
cl_autobind : 1,/* use getport() */
- cl_oneshot : 1,/* dispose after use */
- cl_dead : 1;/* abandoned */
+ cl_oneshot : 1;/* dispose after use */
struct rpc_rtt * cl_rtt; /* RTO estimator data */
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index 254a6e1a5770..fb65249538d4 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -286,7 +286,6 @@ rpc_clone_client(struct rpc_clnt *clnt)
/* Turn off autobind on clones */
new->cl_autobind = 0;
new->cl_oneshot = 0;
- new->cl_dead = 0;
INIT_LIST_HEAD(&new->cl_tasks);
spin_lock_init(&new->cl_lock);
rpc_init_rtt(&new->cl_rtt_default, clnt->cl_xprt->timeout.to_initval);
@@ -305,9 +304,8 @@ out_no_clnt:
/*
* Properly shut down an RPC client, terminating all outstanding
- * requests. Note that we must be certain that cl_oneshot and
- * cl_dead are cleared, or else the client would be destroyed
- * when the last task releases it.
+ * requests. Note that we must be certain that cl_oneshot is cleared,
+ * or else the client would be destroyed when the last task releases it.
*/
int
rpc_shutdown_client(struct rpc_clnt *clnt)
@@ -318,7 +316,6 @@ rpc_shutdown_client(struct rpc_clnt *clnt)
while (!list_empty(&clnt->cl_tasks)) {
/* Don't let rpc_release_client destroy us */
clnt->cl_oneshot = 0;
- clnt->cl_dead = 0;
rpc_killall_tasks(clnt);
wait_event_timeout(destroy_wait,
list_empty(&clnt->cl_tasks), 1*HZ);
@@ -369,7 +366,7 @@ rpc_release_client(struct rpc_clnt *clnt)
if (list_empty(&clnt->cl_tasks))
wake_up(&destroy_wait);
- if (clnt->cl_oneshot || clnt->cl_dead)
+ if (clnt->cl_oneshot)
rpc_destroy_client(clnt);
kref_put(&clnt->cl_kref, rpc_free_client);
}
@@ -483,10 +480,6 @@ int rpc_call_sync(struct rpc_clnt *clnt, struct rpc_message *msg, int flags)
sigset_t oldset;
int status;
- /* If this client is slain all further I/O fails */
- if (clnt->cl_dead)
- return -EIO;
-
BUG_ON(flags & RPC_TASK_ASYNC);
task = rpc_new_task(clnt, flags, &rpc_default_ops, NULL);
@@ -519,11 +512,6 @@ rpc_call_async(struct rpc_clnt *clnt, struct rpc_message *msg, int flags,
sigset_t oldset;
int status;
- /* If this client is slain all further I/O fails */
- status = -EIO;
- if (clnt->cl_dead)
- goto out_release;
-
flags |= RPC_TASK_ASYNC;
/* Create/initialize a new RPC task */