From 963d4994adb82cff8941869c0ceeb550a8e59ebb Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Wed, 13 Jul 2016 14:31:49 +0800 Subject: [PATCH] os/bluestore: use best-effort policy when reclaiming from bluefs Signed-off-by: xie xingguo --- src/os/bluestore/BlueStore.cc | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index d02846fb565cb..3e834e33d4ee6 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -2362,18 +2362,23 @@ int BlueStore::_balance_bluefs_freespace(vector *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; } -- 2.39.5