From: Sage Weil Date: Fri, 8 Sep 2017 22:07:38 +0000 (-0400) Subject: os/bluestore/FreelistManager: create: accept min alloc size X-Git-Tag: v13.0.1~920^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=52453d4ca223c8819f8e35f2c0b691803e74537f;p=ceph.git os/bluestore/FreelistManager: create: accept min alloc size Accept a block size other than bdev_block_size. Let's call it, oh, I don't know, min_alloc_size. Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BitmapFreelistManager.cc b/src/os/bluestore/BitmapFreelistManager.cc index 075d3eff6ef..e551acc5287 100644 --- a/src/os/bluestore/BitmapFreelistManager.cc +++ b/src/os/bluestore/BitmapFreelistManager.cc @@ -58,9 +58,11 @@ BitmapFreelistManager::BitmapFreelistManager(CephContext* cct, { } -int BitmapFreelistManager::create(uint64_t new_size, KeyValueDB::Transaction txn) +int BitmapFreelistManager::create(uint64_t new_size, uint64_t min_alloc_size, + KeyValueDB::Transaction txn) { - bytes_per_block = cct->_conf->bdev_block_size; + bytes_per_block = std::max(cct->_conf->bdev_block_size, + (int64_t)min_alloc_size); assert(ISP2(bytes_per_block)); size = P2ALIGN(new_size, bytes_per_block); blocks_per_key = cct->_conf->bluestore_freelist_blocks_per_key; diff --git a/src/os/bluestore/BitmapFreelistManager.h b/src/os/bluestore/BitmapFreelistManager.h index 9ed39ff5653..cb10c63d98a 100644 --- a/src/os/bluestore/BitmapFreelistManager.h +++ b/src/os/bluestore/BitmapFreelistManager.h @@ -51,7 +51,8 @@ public: static void setup_merge_operator(KeyValueDB *db, string prefix); - int create(uint64_t size, KeyValueDB::Transaction txn) override; + int create(uint64_t size, uint64_t min_alloc_size, + KeyValueDB::Transaction txn) override; int init() override; void shutdown() override; diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 0a73f61f84e..3a53d038f10 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -4169,7 +4169,7 @@ int BlueStore::_open_fm(bool create) bl.append(freelist_type); t->set(PREFIX_SUPER, "freelist_type", bl); } - fm->create(bdev->get_size(), t); + fm->create(bdev->get_size(), cct->_conf->bdev_block_size, t); // allocate superblock reserved space. note that we do not mark // bluefs space as allocated in the freelist; we instead rely on diff --git a/src/os/bluestore/FreelistManager.h b/src/os/bluestore/FreelistManager.h index 7f5ad4d79f9..8f7aacbf2e1 100644 --- a/src/os/bluestore/FreelistManager.h +++ b/src/os/bluestore/FreelistManager.h @@ -24,7 +24,8 @@ public: static void setup_merge_operators(KeyValueDB *db); - virtual int create(uint64_t size, KeyValueDB::Transaction txn) = 0; + virtual int create(uint64_t size, uint64_t min_alloc_size, + KeyValueDB::Transaction txn) = 0; virtual int init() = 0; virtual void shutdown() = 0;