ceph: get snap_rwsem read lock in handle_cap_export for ceph_add_cap
authorNiels Dossche <dossche.niels@gmail.com>
Tue, 15 Mar 2022 15:29:47 +0000 (16:29 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 25 Apr 2022 08:45:15 +0000 (10:45 +0200)
commit7f47f7f3b3c33fd2b4a662cd43cd1af96e1a297e
tree90a305f1eeff65d108133db4cb7dcd0766a8e580
parentdc9b0dc4561dedd44b2bf4b8e5ef1a8a040b2424
ceph: get snap_rwsem read lock in handle_cap_export for ceph_add_cap

ceph_add_cap says in its function documentation that the caller should
hold the read lock on the session snap_rwsem. Furthermore, not only
ceph_add_cap needs that lock, when it calls to ceph_lookup_snap_realm it
eventually calls ceph_get_snap_realm which states via lockdep that
snap_rwsem needs to be held. handle_cap_export calls ceph_add_cap
without that mdsc->snap_rwsem held. Thus, since ceph_get_snap_realm
and ceph_add_cap both need the lock, the common place to acquire that
lock is inside handle_cap_export.

Signed-off-by: Niels Dossche <dossche.niels@gmail.com>
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/caps.c