From bc3ab64c0509992339b480fe40469206dfdc23e6 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Tue, 21 Feb 2023 15:05:51 +0900 Subject: [PATCH] crimson/os/seastore/rbm: remove read_rbm_header in BlockRBManager::open(), and use mount to load superblock Signed-off-by: Myoungwon Oh --- .../random_block_manager/block_rb_manager.cc | 25 +++++++------------ .../random_block_manager/nvme_block_device.cc | 15 ++++++++--- .../random_block_manager/rbm_device.h | 8 ++++-- src/test/crimson/seastore/test_cbjournal.cc | 6 ++--- .../seastore/test_randomblock_manager.cc | 6 ++--- .../seastore/transaction_manager_test_state.h | 7 ++---- 6 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/crimson/os/seastore/random_block_manager/block_rb_manager.cc b/src/crimson/os/seastore/random_block_manager/block_rb_manager.cc index 58983956ca2..d7dacf4f534 100644 --- a/src/crimson/os/seastore/random_block_manager/block_rb_manager.cc +++ b/src/crimson/os/seastore/random_block_manager/block_rb_manager.cc @@ -73,22 +73,15 @@ void BlockRBManager::complete_allocation( BlockRBManager::open_ertr::future<> BlockRBManager::open() { assert(device); - return device->read_rbm_header(RBM_START_ADDRESS - ).safe_then([this](auto s) - -> open_ertr::future<> { - auto ool_start = get_start_rbm_addr(); - allocator->init( - ool_start, - device->get_available_size() - - ool_start, - device->get_block_size()); - return open_ertr::now(); - }).handle_error( - open_ertr::pass_further{}, - crimson::ct_error::assert_all{ - "Invalid error read_rbm_header in BlockRBManager::open" - } - ); + assert(device->get_available_size() > 0); + assert(device->get_block_size() > 0); + auto ool_start = get_start_rbm_addr(); + allocator->init( + ool_start, + device->get_available_size() - + ool_start, + device->get_block_size()); + return open_ertr::now(); } BlockRBManager::write_ertr::future<> BlockRBManager::write( diff --git a/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc b/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc index 4dc65963056..96d3a677224 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc +++ b/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc @@ -86,6 +86,7 @@ read_ertr::future RBMDevice::read_rbm_header( rbm_abs_addr addr) { LOG_PREFIX(RBMDevice::read_rbm_header); + assert(super.block_size > 0); return seastar::do_with( bufferptr(ceph::buffer::create_page_aligned(super.block_size)), [this, addr, FNAME](auto &bptr) { @@ -203,9 +204,17 @@ NVMeBlockDevice::mount_ret NVMeBlockDevice::mount() logger().debug(" mount "); return open(device_path, seastar::open_flags::rw | seastar::open_flags::dsync ).safe_then([this] { - return read_rbm_header(RBM_START_ADDRESS - ).safe_then([](auto s) { - return seastar::now(); + return stat_device( + ).handle_error( + mount_ertr::pass_further{}, + crimson::ct_error::assert_all{ + "Invalid error stat_device in RBMDevice::mount"} + ).safe_then([this](auto st) { + super.block_size = st.block_size; + return read_rbm_header(RBM_START_ADDRESS + ).safe_then([](auto s) { + return seastar::now(); + }); }); }).handle_error( mount_ertr::pass_further{}, diff --git a/src/crimson/os/seastore/random_block_manager/rbm_device.h b/src/crimson/os/seastore/random_block_manager/rbm_device.h index 0752265b39a..97297658dcf 100644 --- a/src/crimson/os/seastore/random_block_manager/rbm_device.h +++ b/src/crimson/os/seastore/random_block_manager/rbm_device.h @@ -204,8 +204,12 @@ public: mount_ret mount() final { return open("", seastar::open_flags::rw - ).safe_then([]() { - return mount_ertr::now(); + ).safe_then([this]() { + super.block_size = TEST_BLOCK_SIZE; + return read_rbm_header(RBM_START_ADDRESS + ).safe_then([](auto s) { + return seastar::now(); + }); }).handle_error( mount_ertr::pass_further{}, crimson::ct_error::assert_all{ diff --git a/src/test/crimson/seastore/test_cbjournal.cc b/src/test/crimson/seastore/test_cbjournal.cc index f5bff5376f0..e2769bf65fe 100644 --- a/src/test/crimson/seastore/test_cbjournal.cc +++ b/src/test/crimson/seastore/test_cbjournal.cc @@ -246,10 +246,10 @@ struct cbjournal_test_t : public seastar_test_suite_t, JournalTrimmer } auto mkfs() { - return device->mount( + device_config_t config = get_rbm_ephemeral_device_config(0, 1); + return device->mkfs(config ).safe_then([this]() { - device_config_t config = get_rbm_ephemeral_device_config(0, 1); - return device->mkfs(config + return device->mount( ).safe_then([this]() { return cbj->open_for_mkfs( ).safe_then([](auto q) { diff --git a/src/test/crimson/seastore/test_randomblock_manager.cc b/src/test/crimson/seastore/test_randomblock_manager.cc index efb1fb4b790..9ddb7f9ad7c 100644 --- a/src/test/crimson/seastore/test_randomblock_manager.cc +++ b/src/test/crimson/seastore/test_randomblock_manager.cc @@ -52,14 +52,14 @@ struct rbm_test_t : seastar::future<> set_up_fut() final { device = random_block_device::create_test_ephemeral( - 0, DEFAULT_TEST_SIZE); + random_block_device::DEFAULT_TEST_CBJOURNAL_SIZE, DEFAULT_TEST_SIZE); block_size = device->get_block_size(); size = device->get_available_size(); rbm_manager.reset(new BlockRBManager(device.get(), std::string(), false)); config = get_rbm_ephemeral_device_config(0, 1); - return device->mount().handle_error(crimson::ct_error::assert_all{} + return device->mkfs(config).handle_error(crimson::ct_error::assert_all{} ).then([this] { - return device->mkfs(config).handle_error(crimson::ct_error::assert_all{} + return device->mount().handle_error(crimson::ct_error::assert_all{} ).then([this] { return rbm_manager->open().handle_error(crimson::ct_error::assert_all{}); }); diff --git a/src/test/crimson/seastore/transaction_manager_test_state.h b/src/test/crimson/seastore/transaction_manager_test_state.h index d53911b8ebf..5c5793111cf 100644 --- a/src/test/crimson/seastore/transaction_manager_test_state.h +++ b/src/test/crimson/seastore/transaction_manager_test_state.h @@ -126,11 +126,8 @@ public: seastar::future<> setup() final { rb_device = random_block_device::create_test_ephemeral(); - return rb_device->mount().handle_error(crimson::ct_error::assert_all{} - ).then([this]() { - device_config_t config = get_rbm_ephemeral_device_config(0, 1); - return rb_device->mkfs(config).handle_error(crimson::ct_error::assert_all{}); - }); + device_config_t config = get_rbm_ephemeral_device_config(0, 1); + return rb_device->mkfs(config).handle_error(crimson::ct_error::assert_all{}); } void remount() final {} -- 2.39.5