diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 230f677db..295731c9f 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -2038,13 +2038,22 @@ void BlueFS::sync_metadata() std::unique_lock l(lock); if (log_t.empty()) { dout(10) << __func__ << " - no pending log events" << dendl; - return; + } else { + 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()); + } + } + utime_t end = ceph_clock_now(); + utime_t dur = end - start; + dout(10) << __func__ << " done in " << dur << dendl; } - dout(10) << __func__ << dendl; - utime_t start = ceph_clock_now(); - flush_bdev(); // FIXME? - _flush_and_sync_log(l); - dout(10) << __func__ << " done in " << (ceph_clock_now() - start) << dendl; if (_should_compact_log()) { if (cct->_conf->bluefs_compact_log_sync) { @@ -2053,10 +2062,6 @@ void BlueFS::sync_metadata() _compact_log_async(l); } } - - utime_t end = ceph_clock_now(); - utime_t dur = end - start; - dout(10) << __func__ << " done in " << dur << dendl; } int BlueFS::open_for_write(