]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw_file: conditionally unlink handles when direct deleted 21438/head
authorMatt Benjamin <mbenjamin@redhat.com>
Sat, 10 Mar 2018 20:25:56 +0000 (15:25 -0500)
committerPrashant D <pdhange@redhat.com>
Mon, 16 Apr 2018 03:38:34 +0000 (23:38 -0400)
The deadlock fix in 3cf0880 deals correctly deals with the
recycle-path locking, but incorrectly removed handle table cleanup
in the !recycle-path case.

The conditional handle removal is predicated on not being in the
recycle path, so this cannot deadlock.

Fixes: http://tracker.ceph.com/issues/23299
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
(cherry picked from commit 2e0f35c57791818eac49974c85dd4dc8ed592c06)

src/rgw/rgw_file.cc

index 38642110f94908a45ff3862a0bcf1d3238db32db..015e395330a44d36cc9d810eaa582806371ad132 100644 (file)
@@ -951,6 +951,11 @@ namespace rgw {
   }
 
   RGWFileHandle::~RGWFileHandle() {
+    /* !recycle case, handle may STILL be in handle table, BUT
+     * the partition lock is not held in this path */
+    if (fh_hook.is_linked()) {
+      fs->fh_cache.remove(fh.fh_hk.object, this, FHCache::FLAG_LOCK);
+    }
     /* cond-unref parent */
     if (parent && (! parent->is_mount())) {
       /* safe because if parent->unref causes its deletion,