X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fos%2Fbluestore%2FBitmapFreelistManager.cc;h=575d3a4becacf874ce8bdef23149073d5a0dbf2c;hb=b32b81446b3b05102be0267e79203f59329c1d97;hp=2480945f41e807ef4cbe7286931f5d7a7ad09948;hpb=215dd7151453fae88e6f968c975b6ce309d42dcf;p=ceph.git diff --git a/ceph/src/os/bluestore/BitmapFreelistManager.cc b/ceph/src/os/bluestore/BitmapFreelistManager.cc index 2480945f4..575d3a4be 100644 --- a/ceph/src/os/bluestore/BitmapFreelistManager.cc +++ b/ceph/src/os/bluestore/BitmapFreelistManager.cc @@ -58,11 +58,10 @@ BitmapFreelistManager::BitmapFreelistManager(CephContext* cct, { } -int BitmapFreelistManager::create(uint64_t new_size, uint64_t min_alloc_size, +int BitmapFreelistManager::create(uint64_t new_size, uint64_t granularity, KeyValueDB::Transaction txn) { - bytes_per_block = std::max(cct->_conf->bdev_block_size, - (int64_t)min_alloc_size); + bytes_per_block = granularity; assert(ISP2(bytes_per_block)); size = P2ALIGN(new_size, bytes_per_block); blocks_per_key = cct->_conf->bluestore_freelist_blocks_per_key; @@ -334,8 +333,8 @@ bool BitmapFreelistManager::enumerate_next(uint64_t *offset, uint64_t *length) << enumerate_offset << " bit 0x" << enumerate_bl_pos << " offset 0x" << end << std::dec << dendl; + end = std::min(get_alloc_units() * bytes_per_block, end); *length = end - *offset; - assert((*offset + *length) <= size); dout(10) << __func__ << std::hex << " 0x" << *offset << "~" << *length << std::dec << dendl; return true; @@ -355,14 +354,13 @@ bool BitmapFreelistManager::enumerate_next(uint64_t *offset, uint64_t *length) } } - end = size; - if (enumerate_offset < end) { + if (enumerate_offset < size) { + end = get_alloc_units() * bytes_per_block; *length = end - *offset; dout(10) << __func__ << std::hex << " 0x" << *offset << "~" << *length << std::dec << dendl; - enumerate_offset = end; + enumerate_offset = size; enumerate_bl_pos = blocks_per_key; - assert((*offset + *length) <= size); return true; }