]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
osdc/Filer: use finisher to execute C_Probe and C_PurgeRange 3159/head
authorYan, Zheng <zyan@redhat.com>
Thu, 4 Dec 2014 04:18:47 +0000 (12:18 +0800)
committerJohn Spray <jspray@redhat.com>
Thu, 11 Dec 2014 22:49:09 +0000 (22:49 +0000)
commit7bbf80ff7388f104cf318dd5ac61ca7d35274694
tree494dede90a4c878e90b21999fa067d7c53896b1a
parent758d9cf30bfc7736cc297ba3b047756f7eb8183e
osdc/Filer: use finisher to execute C_Probe and C_PurgeRange

Currently contexts C_Probe/C_PurgeRange are executed while holding
OSDSession::completion_lock. C_Probe and C_PurgeRange may call
Objecter::stat() and Objecter::remove() respectively, which acquire
Objecter::rwlock. This can cause deadlock because there is intermediate
dependency between Objecter::rwlock and OSDSession::completion_lock:

 Objecter::rwlock -> OSDSession::lock -> OSDSession::completion_lock

The fix is exexcute C_Probe/C_PurgeRange in finisher thread.

Fixes: #10229
Signed-off-by: Yan, Zheng <zyan@redhat.com>
(cherry picked from commit d3ee89ace660161df7796affbf9a70f3d0dedce1)
src/client/Client.cc
src/mds/MDS.cc
src/osdc/Filer.cc
src/osdc/Filer.h
src/osdc/Journaler.h
src/tools/cephfs/Dumper.cc