From a1277976b8b24528d966b1d2a4ab3cd5833db403 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Wed, 18 May 2016 10:34:26 +0800 Subject: [PATCH] os/bluestore/BitAllocator: set_bits() in batch Which is simpler and faster. Signed-off-by: xie xingguo --- src/os/bluestore/BitAllocator.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/os/bluestore/BitAllocator.cc b/src/os/bluestore/BitAllocator.cc index 4d419d4f1947..68f8a7c317da 100644 --- a/src/os/bluestore/BitAllocator.cc +++ b/src/os/bluestore/BitAllocator.cc @@ -163,10 +163,12 @@ void BmapEntry::clear_bits(int offset, int num_bits) void BmapEntry::set_bits(int offset, int num_bits) { - for (int i = 0; i < num_bits; i++) { - bmap_t bmask = bit_mask(i + offset); - (void) std::atomic_fetch_or(&m_bits, bmask); + if (num_bits == 0) { + return; } + + bmap_t bmask = BmapEntry::align_mask(num_bits) >> offset; + (void) std::atomic_fetch_or(&m_bits, bmask); } /* -- 2.47.3