From 529c02db4da9b45cc13bedaa20509a896217fd83 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 8 Sep 2017 18:07:38 -0400 Subject: [PATCH] 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 (cherry picked from commit 52453d4ca223c8819f8e35f2c0b691803e74537f) --- src/os/bluestore/BitmapFreelistManager.cc | 6 ++++-- src/os/bluestore/BitmapFreelistManager.h | 3 ++- src/os/bluestore/BlueStore.cc | 2 +- src/os/bluestore/FreelistManager.h | 3 ++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/os/bluestore/BitmapFreelistManager.cc b/src/os/bluestore/BitmapFreelistManager.cc index 075d3eff6ef18..e551acc52871f 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 9ed39ff56534f..cb10c63d98a11 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 88fe1b4e9e5fa..9c2a2fedcd24d 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -4159,7 +4159,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 7f5ad4d79f9b7..8f7aacbf2e1f6 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; -- 2.39.5