From: Igor Fedotov Date: Thu, 31 May 2018 10:53:37 +0000 (+0300) Subject: os/bluestore: properly respect min_length when analysing partially free X-Git-Tag: v14.0.1~1129^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=288bbd42531bebd8f6c619c848e75bfd9b8f93fd;p=ceph.git os/bluestore: properly respect min_length when analysing partially free slots in bitmap allocator. Signed-off-by: Igor Fedotov --- diff --git a/src/os/bluestore/fastbmap_allocator_impl.cc b/src/os/bluestore/fastbmap_allocator_impl.cc index 08ab2b69dfac..aace813f30a5 100755 --- a/src/os/bluestore/fastbmap_allocator_impl.cc +++ b/src/os/bluestore/fastbmap_allocator_impl.cc @@ -70,7 +70,9 @@ void AllocatorLevel01Loose::_analyze_partials(uint64_t pos_start, ctx->affordable_l0_pos_start = p0; } } - if (l > ctx->min_affordable_len) { + if (l >= min_length && + (ctx->min_affordable_len == 0 || + (l < ctx->min_affordable_len))) { ctx->min_affordable_len = l; ctx->min_affordable_l0_pos_start = p0; } @@ -237,7 +239,8 @@ interval_t AllocatorLevel01Loose::_allocate_l1(uint64_t length, res = interval_t(ctx.affordable_l0_pos_start * l0_granularity, length); return res; } - if (ctx.min_affordable_len >= min_length) { + if (ctx.min_affordable_len) { + assert(ctx.min_affordable_len >= min_length); assert((ctx.min_affordable_len % l0_granularity) == 0); auto pos_end = ctx.min_affordable_l0_pos_start + ctx.min_affordable_len / l0_granularity; @@ -271,7 +274,8 @@ interval_t AllocatorLevel01Loose::_allocate_l1(uint64_t length, res = interval_t(ctx.free_l1_pos * l1_granularity, l); return res; } - if (ctx.min_affordable_len >= min_length) { + if (ctx.min_affordable_len) { + assert(ctx.min_affordable_len >= min_length); assert((ctx.min_affordable_len % l0_granularity) == 0); auto pos_end = ctx.min_affordable_l0_pos_start + ctx.min_affordable_len / l0_granularity;