]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/BlueFS: move release unused extents to _flush_and_sync_log
authorJianpeng Ma <jianpeng.ma@intel.com>
Fri, 15 Sep 2017 10:08:06 +0000 (18:08 +0800)
committerIgor Fedotov <ifedotov@suse.com>
Thu, 14 Mar 2019 16:20:09 +0000 (19:20 +0300)
ASAP to release unused extents.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
(cherry picked from commit 2fc80f919706810d9621140d6c5de9cbf853d114)

src/os/bluestore/BlueFS.cc

index cf3063aa88b80d716414a1a503ddca6b1515df12..4e2b3620bef55584bd2a0397e597ab64eacf2b0e 100644 (file)
@@ -1406,6 +1406,9 @@ int BlueFS::_flush_and_sync_log(std::unique_lock<std::mutex>& l,
     return 0;
   }
 
+  vector<interval_set<uint64_t>> 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<std::mutex>& 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<interval_set<uint64_t>> 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) {