Skip to content

Commit

Permalink
os/FileStore::sync_entry check for stop in after wait
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Kefu Chai <[email protected]>
  • Loading branch information
tchaikov committed May 3, 2016
1 parent a71f3dc commit 65426a5
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/os/filestore/FileStore.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 65426a5

Please sign in to comment.