forked from luck/tmp_suning_uos_patched
SUNRPC: Remove the BKL from the callback functions
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>
This commit is contained in:
parent
c3cc8c019c
commit
a86dc496b7
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
@ -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
|
||||
|
@ -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 = {
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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 */
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue
Block a user