diff options
Diffstat (limited to 'net/sunrpc/sched.c')
| -rw-r--r-- | net/sunrpc/sched.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c index 6eab9bf94baf..385f427bedad 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c | |||
| @@ -576,9 +576,7 @@ EXPORT_SYMBOL_GPL(rpc_delay); | |||
| 576 | */ | 576 | */ |
| 577 | static void rpc_prepare_task(struct rpc_task *task) | 577 | static void rpc_prepare_task(struct rpc_task *task) |
| 578 | { | 578 | { |
| 579 | lock_kernel(); | ||
| 580 | task->tk_ops->rpc_call_prepare(task, task->tk_calldata); | 579 | task->tk_ops->rpc_call_prepare(task, task->tk_calldata); |
| 581 | unlock_kernel(); | ||
| 582 | } | 580 | } |
| 583 | 581 | ||
| 584 | /* | 582 | /* |
| @@ -588,9 +586,7 @@ void rpc_exit_task(struct rpc_task *task) | |||
| 588 | { | 586 | { |
| 589 | task->tk_action = NULL; | 587 | task->tk_action = NULL; |
| 590 | if (task->tk_ops->rpc_call_done != NULL) { | 588 | if (task->tk_ops->rpc_call_done != NULL) { |
| 591 | lock_kernel(); | ||
| 592 | task->tk_ops->rpc_call_done(task, task->tk_calldata); | 589 | task->tk_ops->rpc_call_done(task, task->tk_calldata); |
| 593 | unlock_kernel(); | ||
| 594 | if (task->tk_action != NULL) { | 590 | if (task->tk_action != NULL) { |
| 595 | WARN_ON(RPC_ASSASSINATED(task)); | 591 | WARN_ON(RPC_ASSASSINATED(task)); |
| 596 | /* Always release the RPC slot and buffer memory */ | 592 | /* Always release the RPC slot and buffer memory */ |
| @@ -602,11 +598,8 @@ EXPORT_SYMBOL_GPL(rpc_exit_task); | |||
| 602 | 598 | ||
| 603 | void rpc_release_calldata(const struct rpc_call_ops *ops, void *calldata) | 599 | void rpc_release_calldata(const struct rpc_call_ops *ops, void *calldata) |
| 604 | { | 600 | { |
| 605 | if (ops->rpc_release != NULL) { | 601 | if (ops->rpc_release != NULL) |
| 606 | lock_kernel(); | ||
| 607 | ops->rpc_release(calldata); | 602 | ops->rpc_release(calldata); |
| 608 | unlock_kernel(); | ||
| 609 | } | ||
| 610 | } | 603 | } |
| 611 | 604 | ||
| 612 | /* | 605 | /* |
| @@ -626,19 +619,15 @@ static void __rpc_execute(struct rpc_task *task) | |||
| 626 | /* | 619 | /* |
| 627 | * Execute any pending callback. | 620 | * Execute any pending callback. |
| 628 | */ | 621 | */ |
| 629 | if (RPC_DO_CALLBACK(task)) { | 622 | if (task->tk_callback) { |
| 630 | /* Define a callback save pointer */ | ||
| 631 | void (*save_callback)(struct rpc_task *); | 623 | void (*save_callback)(struct rpc_task *); |
| 632 | 624 | ||
| 633 | /* | 625 | /* |
| 634 | * If a callback exists, save it, reset it, | 626 | * We set tk_callback to NULL before calling it, |
| 635 | * call it. | 627 | * in case it sets the tk_callback field itself: |
| 636 | * The save is needed to stop from resetting | ||
| 637 | * another callback set within the callback handler | ||
| 638 | * - Dave | ||
| 639 | */ | 628 | */ |
| 640 | save_callback=task->tk_callback; | 629 | save_callback = task->tk_callback; |
| 641 | task->tk_callback=NULL; | 630 | task->tk_callback = NULL; |
| 642 | save_callback(task); | 631 | save_callback(task); |
| 643 | } | 632 | } |
| 644 | 633 | ||
