]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/FileStore::sync_entry check for stop in after wait
authorKefu Chai <kchai@redhat.com>
Tue, 3 May 2016 09:20:04 +0000 (17:20 +0800)
committerBoris Ranto <branto@redhat.com>
Fri, 6 May 2016 11:44:16 +0000 (13:44 +0200)
there is chance that the sync_entry() gets signaled in the
WaitInterval(max_interval) call because of sync_cond.Signal() call after
"stop = true" in umount(), so without this change, sync_entry() will
continue wait until min_interval is reached. this forces umount() to
wait even it has called d_force_sync(), and hence slows down the
progress of umount(). so we need to check for `stop` if we are not
signalled because of `force_sync`.

Fixes: http://tracker.ceph.com/issues/15695
Reported-by: Haomai Wang <haomaiwang@gmail.com>
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/os/filestore/FileStore.cc

index 07b6b1e5478bc0b6b25bf10aa30001e2d223c15a..a3e6532dd1835181e5842c307075688f1b2688a4 100644 (file)
@@ -3693,6 +3693,9 @@ void FileStore::sync_entry()
     if (force_sync) {
       dout(20) << "sync_entry force_sync set" << dendl;
       force_sync = false;
+    } else if (stop) {
+      dout(20) << __func__ << " stop set" << dendl;
+      break;
     } else {
       // wait for at least the min interval
       utime_t woke = ceph_clock_now(g_ceph_context);