]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: use best-effort policy when reclaiming from bluefs
authorxie xingguo <xie.xingguo@zte.com.cn>
Wed, 13 Jul 2016 06:31:49 +0000 (14:31 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Wed, 13 Jul 2016 06:34:24 +0000 (14:34 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/bluestore/BlueStore.cc

index d02846fb565cb41d1d656bd521a5c8dde265c43f..3e834e33d4ee6cdbc8440b6a741a748b796f33e8 100644 (file)
@@ -2362,18 +2362,23 @@ int BlueStore::_balance_bluefs_freespace(vector<bluestore_pextent_t> *extents,
     dout(10) << __func__ << " reclaiming " << reclaim
             << " (" << pretty_si_t(reclaim) << ")" << dendl;
 
-    uint64_t offset = 0;
-    uint32_t length = 0;
+    while (reclaim > 0) {
+      uint64_t offset = 0;
+      uint32_t length = 0;
 
-    // NOTE: this will block and do IO.
-    int r = bluefs->reclaim_blocks(bluefs_shared_bdev, reclaim,
+      // NOTE: this will block and do IO.
+      int r = bluefs->reclaim_blocks(bluefs_shared_bdev, reclaim,
                                   &offset, &length);
-    assert(r >= 0);
+      assert(r >= 0);
 
-    bluefs_extents.erase(offset, length);
+      bluefs_extents.erase(offset, length);
+
+      fm->release(offset, length, t);
+      alloc->release(offset, length);
+
+      reclaim -= length;
+    }
 
-    fm->release(offset, length, t);
-    alloc->release(offset, length);
     ret = 1;
   }