]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: defer bluefs reclaimed extent release
authorSage Weil <sage@redhat.com>
Tue, 6 Dec 2016 17:29:11 +0000 (12:29 -0500)
committerSage Weil <sage@redhat.com>
Thu, 15 Dec 2016 19:20:27 +0000 (14:20 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index 312bfe42fae156fd1bce483f483b97bca2dad346..f268d1f7b1ac5541b3da43435cb975d2f472e1f7 100644 (file)
@@ -3630,8 +3630,7 @@ int BlueStore::_balance_bluefs_freespace(vector<bluestore_pextent_t> *extents)
       assert(r >= 0);
 
       bluefs_extents.erase(offset, length);
-
-      alloc->release(offset, length);
+      bluefs_extents_reclaiming.insert(offset, length);
 
       reclaim -= length;
     }
@@ -6740,6 +6739,15 @@ void BlueStore::_kv_sync_thread()
        if (!bluefs_gift_extents.empty()) {
          _commit_bluefs_freespace(bluefs_gift_extents);
        }
+       for (auto p = bluefs_extents_reclaiming.begin();
+            p != bluefs_extents_reclaiming.end();
+            ++p) {
+         dout(20) << __func__ << " releasing old bluefs 0x" << std::hex
+                  << p.get_start() << "~" << p.get_len() << std::dec
+                  << dendl;
+         alloc->release(p.get_start(), p.get_len());
+       }
+       bluefs_extents_reclaiming.clear();
       }
 
       l.lock();
index 0633bf7983d007890680726569dca797ef394ea3..421f75e989b02db40f7dcff0305e132d1dc04aad 100644 (file)
@@ -1512,6 +1512,7 @@ private:
   Throttle throttle_wal_ops, throttle_wal_bytes;  ///< submit to wal complete
 
   interval_set<uint64_t> bluefs_extents;  ///< block extents owned by bluefs
+  interval_set<uint64_t> bluefs_extents_reclaiming; ///< currently reclaiming
 
   std::mutex wal_lock;
   std::atomic<uint64_t> wal_seq = {0};