]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
osdc/Filer: use finisher to execute C_Probe and C_PurgeRange 3074/head
authorYan, Zheng <zyan@redhat.com>
Thu, 4 Dec 2014 04:18:47 +0000 (12:18 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 4 Dec 2014 05:26:33 +0000 (13:26 +0800)
commitd3ee89ace660161df7796affbf9a70f3d0dedce1
treeb542213c1b01bae97f8f32737352f6d530a4d1e7
parent68fdc0f68e6a04e283d2c5140832a3175b4f9840
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>
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