Skip to content

Commit

Permalink
SUNRPC: Remove the BKL from the callback functions
Browse files Browse the repository at this point in the history
Push it into those callback functions that actually need it.

Note that all the NFS operations use their own locking, so don't need the
BKL. Ditto for the rpcbind client.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Jul 15, 2008
1 parent c3cc8c0 commit a86dc49
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 9 deletions.
6 changes: 6 additions & 0 deletions fs/lockd/clntproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,9 @@ void nlm_release_call(struct nlm_rqst *call)

static void nlmclnt_rpc_release(void *data)
{
lock_kernel();
nlm_release_call(data);
unlock_kernel();
}

static int nlm_wait_on_grace(wait_queue_head_t *queue)
Expand Down Expand Up @@ -710,7 +712,9 @@ static void nlmclnt_unlock_callback(struct rpc_task *task, void *data)
die:
return;
retry_rebind:
lock_kernel();
nlm_rebind_host(req->a_host);
unlock_kernel();
retry_unlock:
rpc_restart_call(task);
}
Expand Down Expand Up @@ -788,7 +792,9 @@ static void nlmclnt_cancel_callback(struct rpc_task *task, void *data)
/* Don't ever retry more than 3 times */
if (req->a_retries++ >= NLMCLNT_MAX_RETRIES)
goto die;
lock_kernel();
nlm_rebind_host(req->a_host);
unlock_kernel();
rpc_restart_call(task);
rpc_delay(task, 30 * HZ);
}
Expand Down
2 changes: 2 additions & 0 deletions fs/lockd/svc4proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,9 @@ static void nlm4svc_callback_exit(struct rpc_task *task, void *data)

static void nlm4svc_callback_release(void *data)
{
lock_kernel();
nlm_release_call(data);
unlock_kernel();
}

static const struct rpc_call_ops nlm4svc_callback_ops = {
Expand Down
7 changes: 6 additions & 1 deletion fs/lockd/svclock.c
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,7 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)

dprintk("lockd: GRANT_MSG RPC callback\n");

lock_kernel();
/* if the block is not on a list at this point then it has
* been invalidated. Don't try to requeue it.
*
Expand All @@ -804,7 +805,7 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)
* for nlm_blocked?
*/
if (list_empty(&block->b_list))
return;
goto out;

/* Technically, we should down the file semaphore here. Since we
* move the block towards the head of the queue only, no harm
Expand All @@ -818,13 +819,17 @@ static void nlmsvc_grant_callback(struct rpc_task *task, void *data)
}
nlmsvc_insert_block(block, timeout);
svc_wake_up(block->b_daemon);
out:
unlock_kernel();
}

static void nlmsvc_grant_release(void *data)
{
struct nlm_rqst *call = data;

lock_kernel();
nlmsvc_release_block(call->a_block);
unlock_kernel();
}

static const struct rpc_call_ops nlmsvc_grant_ops = {
Expand Down
2 changes: 2 additions & 0 deletions fs/lockd/svcproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,9 @@ static void nlmsvc_callback_exit(struct rpc_task *task, void *data)

static void nlmsvc_callback_release(void *data)
{
lock_kernel();
nlm_release_call(data);
unlock_kernel();
}

static const struct rpc_call_ops nlmsvc_callback_ops = {
Expand Down
9 changes: 1 addition & 8 deletions net/sunrpc/sched.c
Original file line number Diff line number Diff line change
Expand Up @@ -576,9 +576,7 @@ EXPORT_SYMBOL_GPL(rpc_delay);
*/
static void rpc_prepare_task(struct rpc_task *task)
{
lock_kernel();
task->tk_ops->rpc_call_prepare(task, task->tk_calldata);
unlock_kernel();
}

/*
Expand All @@ -588,9 +586,7 @@ void rpc_exit_task(struct rpc_task *task)
{
task->tk_action = NULL;
if (task->tk_ops->rpc_call_done != NULL) {
lock_kernel();
task->tk_ops->rpc_call_done(task, task->tk_calldata);
unlock_kernel();
if (task->tk_action != NULL) {
WARN_ON(RPC_ASSASSINATED(task));
/* Always release the RPC slot and buffer memory */
Expand All @@ -602,11 +598,8 @@ EXPORT_SYMBOL_GPL(rpc_exit_task);

void rpc_release_calldata(const struct rpc_call_ops *ops, void *calldata)
{
if (ops->rpc_release != NULL) {
lock_kernel();
if (ops->rpc_release != NULL)
ops->rpc_release(calldata);
unlock_kernel();
}
}

/*
Expand Down

0 comments on commit a86dc49

Please sign in to comment.