• Trond Myklebust's avatar
    NFSv4: Fix a potential sleep while atomic in nfs4_do_reclaim() · b6bc6d20
    Trond Myklebust authored
    [ Upstream commit c77e2283
    
     ]
    
    John Hubbard reports seeing the following stack trace:
    
    nfs4_do_reclaim
       rcu_read_lock /* we are now in_atomic() and must not sleep */
           nfs4_purge_state_owners
               nfs4_free_state_owner
                   nfs4_destroy_seqid_counter
                       rpc_destroy_wait_queue
                           cancel_delayed_work_sync
                               __cancel_work_timer
                                   __flush_work
                                       start_flush_work
                                           might_sleep:
                                            (kernel/workqueue.c:2975: BUG)
    
    The solution is to separate out the freeing of the state owners
    from nfs4_purge_state_owners(), and perform that outside the atomic
    context.
    Reported-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
    Fixes: 0aaaf5c4 ("NFS: Cache state owners after files are closed")
    Signed-off-by: Trond Myklebust <t...
    b6bc6d20
nfs4state.c 66.9 KB