Skip to content

Commit

Permalink
SUNRPC: Kill rpc_clnt->cl_dead
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Jul 11, 2007
1 parent 34f52e3 commit 848f1fe
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 17 deletions.
3 changes: 1 addition & 2 deletions include/linux/sunrpc/clnt.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand Down
18 changes: 3 additions & 15 deletions net/sunrpc/clnt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -305,9 +304,8 @@ rpc_clone_client(struct rpc_clnt *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)
Expand All @@ -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);
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit 848f1fe

Please sign in to comment.