From 7e8bfef44d3d1f57f19d0cb48afe9960a3eefb4f Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 3 May 2016 17:20:04 +0800 Subject: [PATCH] os/FileStore::sync_entry check for stop in after wait 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 Signed-off-by: Kefu Chai --- src/os/filestore/FileStore.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index 07b6b1e5478bc..a3e6532dd1835 100644 --- a/src/os/filestore/FileStore.cc +++ b/src/os/filestore/FileStore.cc @@ -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); -- 2.39.5