• Sage Weil's avatar
    ceph: fix session locking in handle_caps, ceph_check_caps · cdc2ce05
    Sage Weil authored
    Passing a session pointer to ceph_check_caps() used to mean it would leave
    the session mutex locked.  That wasn't always possible if it wasn't passed
    CHECK_CAPS_AUTHONLY.   If could unlock the passed session and lock a
    differet session mutex, which was clearly wrong, and also emitted a
    warning when it a racing CPU retook it and we did an unlock from the wrong
    context.
    
    This was only a problem when there was more than one MDS.
    
    First, make ceph_check_caps unconditionally drop the session mutex, so that
    it is free to lock other sessions as needed.  Then adjust the one caller
    that passes in a session (handle_cap_grant) accordingly.
    Signed-off-by: default avatarSage Weil <sage@newdream.net>
    cdc2ce05
caps.c 79.1 KB