• Alex Elder's avatar
    ceph: create a new session lock to avoid lock inversion · d8fb02ab
    Alex Elder authored
    Lockdep was reporting a possible circular lock dependency in
    dentry_lease_is_valid().  That function needs to sample the
    session's s_cap_gen and and s_cap_ttl fields coherently, but needs
    to do so while holding a dentry lock.  The s_cap_lock field was
    being used to protect the two fields, but that can't be taken while
    holding a lock on a dentry within the session.
    
    In most cases, the s_cap_gen and s_cap_ttl fields only get operated
    on separately.  But in three cases they need to be updated together.
    Implement a new lock to protect the spots updating both fields
    atomically is required.
    Signed-off-by: default avatarAlex Elder <elder@dreamhost.com>
    Reviewed-by: default avatarSage Weil <sage@newdream.net>
    d8fb02ab
mds_client.h 11.8 KB