mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 17:41:50 +00:00
NFS: add nfs_sb_deactive_async to avoid deadlock
Use nfs_sb_deactive_async instead of nfs_sb_deactive when in a workqueue context. This avoids a deadlock where rpc_shutdown_client loops forever in a workqueue kworker context, trying to kill all RPC tasks associated with the client, while one or more of these tasks have already been assigned to the same kworker (and will never run rpc_exit_task). This approach is needed because RPC tasks that have already been assigned to a kworker by queue_work cannot be canceled, as explained in the comment for workqueue.c:insert_wq_barrier. Signed-off-by: Weston Andros Adamson <dros@netapp.com> [Trond: add module_get/put.] Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
97a5486826
commit
324d003b0c
5 changed files with 56 additions and 3 deletions
|
@ -95,7 +95,7 @@ static void nfs_async_unlink_release(void *calldata)
|
|||
|
||||
nfs_dec_sillycount(data->dir);
|
||||
nfs_free_unlinkdata(data);
|
||||
nfs_sb_deactive(sb);
|
||||
nfs_sb_deactive_async(sb);
|
||||
}
|
||||
|
||||
static void nfs_unlink_prepare(struct rpc_task *task, void *calldata)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue