ceph: fix session locking in handle_caps, ceph_check_caps
authorSage Weil <sage@newdream.net>
Tue, 16 Mar 2010 20:39:28 +0000 (13:39 -0700)
committerSage Weil <sage@newdream.net>
Tue, 23 Mar 2010 14:46:53 +0000 (07:46 -0700)
commitcdc2ce056a3620139056b60ad7f6d355ad13f445
tree1aed7f66612d13beeeec6e2c191f19eff44d1054
parent4ea0043a29c82ca52ca54728d837314563bec574
ceph: fix session locking in handle_caps, ceph_check_caps

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: Sage Weil <sage@newdream.net>
fs/ceph/caps.c