• Jeff Layton's avatar
    nfsd: ensure that clp->cl_revoked list is protected by clp->cl_lock · 2d4a532d
    Jeff Layton authored
    Currently, both destroy_revoked_delegation and revoke_delegation
    manipulate the cl_revoked list without any locking aside from the
    client_mutex. Ensure that the clp->cl_lock is held when manipulating it,
    except for the list walking in destroy_client. At that point, the client
    should no longer be in use, and so it should be safe to walk the list
    without any locking. That also means that we don't need to do the
    list_splice_init there either.
    
    Also, the fact that revoke_delegation deletes dl_recall_lru list_head
    without any locking makes it difficult to know whether it's doing so
    safely in all cases. Move the list_del_init calls into the callers, and
    add a WARN_ON in the event that t's passed a delegation that has a
    non-empty list_head.
    Signed-off-by: default avatarJeff Layton <jlayton@primarydata.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
    2d4a532d
nfs4state.c 147 KB