Skip to content
  • Weston Andros Adamson's avatar
    NFS: add nfs_sb_deactive_async to avoid deadlock · 324d003b
    Weston Andros Adamson authored
    
    
    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: default avatarWeston Andros Adamson <dros@netapp.com>
    [Trond: add module_get/put.]
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    324d003b