• J. Bruce Fields's avatar
    nfsd4: don't destroy in-use clients · 221a6876
    J. Bruce Fields authored
    When a setclientid_confirm or create_session confirms a client after a
    client reboot, it also destroys any previous state held by that client.
    
    The shutdown of that previous state must be careful not to free the
    client out from under threads processing other requests that refer to
    the client.
    
    This is a particular problem in the NFSv4.1 case when we hold a
    reference to a session (hence a client) throughout compound processing.
    
    The server attempts to handle this by unhashing the client at the time
    it's destroyed, then delaying the final free to the end.  But this still
    leaves some races in the current code.
    
    I believe it's simpler just to fail the attempt to destroy the client by
    returning NFS4ERR_DELAY.  This is a case that should never happen
    anyway.
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    221a6876
nfs4state.c 133 KB