From cbb65c0edf8ae22e1331602c7fce39877677593e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 3 Jun 2016 17:18:22 -0400 Subject: [PATCH] os/bluestore: maintain min_alloc_size_order Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 17 ++++++++--------- src/os/bluestore/BlueStore.h | 3 ++- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 6bab7608e80ce..e90aed5448f62 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -49,7 +49,6 @@ const string PREFIX_ALLOC = "B"; // u64 offset -> u64 length (freelist) // for bluefs, label (4k) + bluefs super (4k), means we start at 8k. #define BLUEFS_START 8192 - /* * object name key structure * @@ -1007,8 +1006,6 @@ BlueStore::BlueStore(CephContext *cct, const string& path) kv_stop(false), logger(NULL), csum_type(bluestore_blob_t::CSUM_CRC32C), - min_alloc_size(0), - max_alloc_size(0), sync_wal_apply(cct->_conf->bluestore_sync_wal_apply) { _init_logger(); @@ -1276,7 +1273,6 @@ int BlueStore::_check_or_set_bdev_label( void BlueStore::_set_alloc_sizes(void) { - max_alloc_size = g_conf->bluestore_max_alloc_size; /* * Set device block size according to its media */ @@ -1290,9 +1286,14 @@ void BlueStore::_set_alloc_sizes(void) min_alloc_size = g_conf->bluestore_min_alloc_size_ssd; } } + min_alloc_size_order = ctz(min_alloc_size); + assert(min_alloc_size == 1u << min_alloc_size_order); + + max_alloc_size = g_conf->bluestore_max_alloc_size; dout(10) << __func__ << " min_alloc_size 0x" << std::hex << min_alloc_size - << " max_alloc_size 0x" << max_alloc_size + << std::dec << " order " << min_alloc_size_order + << " max_alloc_size 0x" << std::hex << max_alloc_size << std::dec << dendl; } @@ -1315,10 +1316,8 @@ int BlueStore::_open_bdev(bool create) // initialize global block parameters block_size = bdev->get_block_size(); block_mask = ~(block_size - 1); - block_size_order = 0; - for (uint64_t t = 1; t < block_size; t <<= 1) { - ++block_size_order; - } + block_size_order = ctz(block_size); + assert(block_size == 1u << block_size_order); _set_alloc_sizes(); max_alloc_size = g_conf->bluestore_max_alloc_size; diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index c352209c1d19f..6c2dc71ec13af 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -906,7 +906,8 @@ private: uint64_t block_mask; ///< mask to get just the block offset size_t block_size_order; ///< bits to shift to get block size - uint64_t min_alloc_size; ///< minimum allocation unit (power of 2) + uint64_t min_alloc_size = 0; ///< minimum allocation unit (power of 2) + size_t min_alloc_size_order = 0; ///< bits for min_alloc_size uint64_t max_alloc_size; ///< maximum allocation unit (power of 2) -- 2.39.5