diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-10-18 16:01:06 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-12-06 10:46:30 -0500 |
commit | 6d5fcb5a52bfd00eab3ba2c7ca890823388436ae (patch) | |
tree | 3408c72a54ac64d68e0e0a505ebe3757f8e42fac | |
parent | bbd5a1f9fc9fad0f8725812d91c51b052e847de8 (diff) |
SUNRPC: Remove BKL around the RPC socket operations etc.
All internal RPC client operations should no longer depend on the BKL,
however lockd and NFS callbacks may still require it.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r-- | net/sunrpc/clnt.c | 8 | ||||
-rw-r--r-- | net/sunrpc/sched.c | 8 |
2 files changed, 11 insertions, 5 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 37d345c04aa5..7d65e19550cc 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/types.h> | 27 | #include <linux/types.h> |
28 | #include <linux/mm.h> | 28 | #include <linux/mm.h> |
29 | #include <linux/slab.h> | 29 | #include <linux/slab.h> |
30 | #include <linux/smp_lock.h> | ||
30 | #include <linux/utsname.h> | 31 | #include <linux/utsname.h> |
31 | #include <linux/workqueue.h> | 32 | #include <linux/workqueue.h> |
32 | 33 | ||
@@ -823,8 +824,10 @@ call_encode(struct rpc_task *task) | |||
823 | if (encode == NULL) | 824 | if (encode == NULL) |
824 | return; | 825 | return; |
825 | 826 | ||
827 | lock_kernel(); | ||
826 | task->tk_status = rpcauth_wrap_req(task, encode, req, p, | 828 | task->tk_status = rpcauth_wrap_req(task, encode, req, p, |
827 | task->tk_msg.rpc_argp); | 829 | task->tk_msg.rpc_argp); |
830 | unlock_kernel(); | ||
828 | if (task->tk_status == -ENOMEM) { | 831 | if (task->tk_status == -ENOMEM) { |
829 | /* XXX: Is this sane? */ | 832 | /* XXX: Is this sane? */ |
830 | rpc_delay(task, 3*HZ); | 833 | rpc_delay(task, 3*HZ); |
@@ -1155,9 +1158,12 @@ call_decode(struct rpc_task *task) | |||
1155 | 1158 | ||
1156 | task->tk_action = rpc_exit_task; | 1159 | task->tk_action = rpc_exit_task; |
1157 | 1160 | ||
1158 | if (decode) | 1161 | if (decode) { |
1162 | lock_kernel(); | ||
1159 | task->tk_status = rpcauth_unwrap_resp(task, decode, req, p, | 1163 | task->tk_status = rpcauth_unwrap_resp(task, decode, req, p, |
1160 | task->tk_msg.rpc_resp); | 1164 | task->tk_msg.rpc_resp); |
1165 | unlock_kernel(); | ||
1166 | } | ||
1161 | dprintk("RPC: %4d call_decode result %d\n", task->tk_pid, | 1167 | dprintk("RPC: %4d call_decode result %d\n", task->tk_pid, |
1162 | task->tk_status); | 1168 | task->tk_status); |
1163 | return; | 1169 | return; |
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c index 9c13050d23eb..f9fd66b1d48b 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c | |||
@@ -588,7 +588,9 @@ void rpc_delay(struct rpc_task *task, unsigned long delay) | |||
588 | */ | 588 | */ |
589 | static void rpc_prepare_task(struct rpc_task *task) | 589 | static void rpc_prepare_task(struct rpc_task *task) |
590 | { | 590 | { |
591 | lock_kernel(); | ||
591 | task->tk_ops->rpc_call_prepare(task, task->tk_calldata); | 592 | task->tk_ops->rpc_call_prepare(task, task->tk_calldata); |
593 | unlock_kernel(); | ||
592 | } | 594 | } |
593 | 595 | ||
594 | /* | 596 | /* |
@@ -598,7 +600,9 @@ void rpc_exit_task(struct rpc_task *task) | |||
598 | { | 600 | { |
599 | task->tk_action = NULL; | 601 | task->tk_action = NULL; |
600 | if (task->tk_ops->rpc_call_done != NULL) { | 602 | if (task->tk_ops->rpc_call_done != NULL) { |
603 | lock_kernel(); | ||
601 | task->tk_ops->rpc_call_done(task, task->tk_calldata); | 604 | task->tk_ops->rpc_call_done(task, task->tk_calldata); |
605 | unlock_kernel(); | ||
602 | if (task->tk_action != NULL) { | 606 | if (task->tk_action != NULL) { |
603 | WARN_ON(RPC_ASSASSINATED(task)); | 607 | WARN_ON(RPC_ASSASSINATED(task)); |
604 | /* Always release the RPC slot and buffer memory */ | 608 | /* Always release the RPC slot and buffer memory */ |
@@ -651,9 +655,7 @@ static int __rpc_execute(struct rpc_task *task) | |||
651 | */ | 655 | */ |
652 | save_callback=task->tk_callback; | 656 | save_callback=task->tk_callback; |
653 | task->tk_callback=NULL; | 657 | task->tk_callback=NULL; |
654 | lock_kernel(); | ||
655 | save_callback(task); | 658 | save_callback(task); |
656 | unlock_kernel(); | ||
657 | } | 659 | } |
658 | 660 | ||
659 | /* | 661 | /* |
@@ -664,9 +666,7 @@ static int __rpc_execute(struct rpc_task *task) | |||
664 | if (!RPC_IS_QUEUED(task)) { | 666 | if (!RPC_IS_QUEUED(task)) { |
665 | if (task->tk_action == NULL) | 667 | if (task->tk_action == NULL) |
666 | break; | 668 | break; |
667 | lock_kernel(); | ||
668 | task->tk_action(task); | 669 | task->tk_action(task); |
669 | unlock_kernel(); | ||
670 | } | 670 | } |
671 | 671 | ||
672 | /* | 672 | /* |