From: Jianpeng Ma Date: Fri, 15 Sep 2017 10:08:06 +0000 (+0800) Subject: os/bluestore/BlueFS: move release unused extents to _flush_and_sync_log X-Git-Tag: v12.2.12~16^2~27 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=29cf76eeb153844b3e64f16f1985ccb75d14baf4;p=ceph.git os/bluestore/BlueFS: move release unused extents to _flush_and_sync_log ASAP to release unused extents. Signed-off-by: Jianpeng Ma (cherry picked from commit 2fc80f919706810d9621140d6c5de9cbf853d114) --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index cf3063aa88b..4e2b3620bef 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -1406,6 +1406,9 @@ int BlueFS::_flush_and_sync_log(std::unique_lock& l, return 0; } + vector> to_release(pending_release.size()); + to_release.swap(pending_release); + uint64_t seq = log_t.seq = ++log_seq; assert(want_seq == 0 || want_seq <= seq); log_t.uuid = super.uuid; @@ -1498,6 +1501,13 @@ int BlueFS::_flush_and_sync_log(std::unique_lock& l, << " already >= out seq " << seq << ", we lost a race against another log flush, done" << dendl; } + + for (unsigned i = 0; i < to_release.size(); ++i) { + for (auto p = to_release[i].begin(); p != to_release[i].end(); ++p) { + alloc[i]->release(p.get_start(), p.get_len()); + } + } + _update_logger_stats(); return 0; @@ -1933,15 +1943,9 @@ void BlueFS::sync_metadata() } dout(10) << __func__ << dendl; utime_t start = ceph_clock_now(); - vector> to_release(pending_release.size()); - to_release.swap(pending_release); flush_bdev(); // FIXME? _flush_and_sync_log(l); - for (unsigned i = 0; i < to_release.size(); ++i) { - for (auto p = to_release[i].begin(); p != to_release[i].end(); ++p) { - alloc[i]->release(p.get_start(), p.get_len()); - } - } + dout(10) << __func__ << " done in " << (ceph_clock_now() - start) << dendl; if (_should_compact_log()) { if (cct->_conf->bluefs_compact_log_sync) {