]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/BlueFS: move release unused extents to _flush_and_sync_log 17684/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Fri, 15 Sep 2017 10:08:06 +0000 (18:08 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Fri, 15 Sep 2017 10:08:06 +0000 (18:08 +0800)
ASAP to release unused extents.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/os/bluestore/BlueFS.cc

index 33561406c3764c62d0845416cdadda4132c07b9f..414721d0a2eeb4c646848a4ae48a9dc5bd730b9f 100644 (file)
@@ -1355,6 +1355,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;
@@ -1448,6 +1451,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;
@@ -1886,15 +1896,8 @@ void BlueFS::sync_metadata()
   } else {
     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;
   }