]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: check ongoing catter-gather process before capping log 17853/head
authorYan, Zheng <zyan@redhat.com>
Thu, 21 Sep 2017 02:56:07 +0000 (10:56 +0800)
committerYan, Zheng <zyan@redhat.com>
Thu, 21 Sep 2017 03:05:59 +0000 (11:05 +0800)
When deactivating mds, MDLog::trim() may start scatter-gather
process on mdsdir inode. Locker::scatter_writebehind() submits
log entry. So mds should make sure there is no scatter-gather
before capping log.

Fixes: http://tracker.ceph.com/issues/21467
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
src/mds/MDCache.cc

index ef6263dbd77823e6f2605d7f80511c987412c932..17e3c4323aa6cc33ae0357b5e1e6e8570a06dde5 100644 (file)
@@ -7603,12 +7603,6 @@ bool MDCache::shutdown_pass()
   assert(!migrator->is_exporting());
   assert(!migrator->is_importing());
 
-  if ((myin && myin->is_auth_pinned()) ||
-      (mydir && mydir->is_auth_pinned())) {
-    dout(7) << "still have auth pinned objects" << dendl;
-    return false;
-  }
-
   // flush what we can from the log
   mds->mdlog->trim(0);
   if (mds->mdlog->get_num_segments() > 1) {
@@ -7616,6 +7610,12 @@ bool MDCache::shutdown_pass()
     return false;
   }
 
+  if ((myin && myin->is_auth_pinned()) ||
+      (mydir && mydir->is_auth_pinned())) {
+    dout(7) << "still have auth pinned objects" << dendl;
+    return false;
+  }
+
   // (only do this once!)
   if (!mds->mdlog->is_capped()) {
     dout(7) << "capping the log" << dendl;