From f3c3bf8139c78f0c21f74c5ae7fe5959003efff4 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Fri, 22 Oct 2021 15:26:52 +0900 Subject: [PATCH] seastore: make public interfaces in RBM to use paddr_t Signed-off-by: Myoungwon Oh --- .../os/seastore/random_block_manager.h | 6 ++--- .../random_block_manager/nvme_manager.cc | 23 +++++++++++++++---- .../random_block_manager/nvme_manager.h | 2 +- .../seastore/test_randomblock_manager.cc | 14 +++++++---- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/crimson/os/seastore/random_block_manager.h b/src/crimson/os/seastore/random_block_manager.h index d184bb205f8..eb619739cd3 100644 --- a/src/crimson/os/seastore/random_block_manager.h +++ b/src/crimson/os/seastore/random_block_manager.h @@ -28,8 +28,8 @@ public: struct mkfs_config_t { std::string path; - blk_paddr_t start; - blk_paddr_t end; + paddr_t start; + paddr_t end; size_t block_size = 0; size_t total_size = 0; uint32_t blocks_per_segment = 1 << 18; @@ -61,7 +61,7 @@ public: crimson::ct_error::input_output_error, crimson::ct_error::invarg, crimson::ct_error::enoent>; - virtual open_ertr::future<> open(const std::string &path, blk_paddr_t start) = 0; + virtual open_ertr::future<> open(const std::string &path, paddr_t start) = 0; using close_ertr = crimson::errorator< crimson::ct_error::input_output_error, diff --git a/src/crimson/os/seastore/random_block_manager/nvme_manager.cc b/src/crimson/os/seastore/random_block_manager/nvme_manager.cc index 07ccbbce7c4..558cad59db2 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_manager.cc +++ b/src/crimson/os/seastore/random_block_manager/nvme_manager.cc @@ -119,15 +119,25 @@ NVMeManager::mkfs_ertr::future<> NVMeManager::mkfs(mkfs_config_t config) { logger().debug("path {}", path); return _open_device(path).safe_then([this, &config]() { - return read_rbm_header(config.start).safe_then([](auto super) { + blk_paddr_t addr = convert_paddr_to_blk_paddr( + config.start, + config.block_size, + config.blocks_per_segment); + return read_rbm_header(addr).safe_then([](auto super) { logger().debug(" already exists "); return mkfs_ertr::now(); }).handle_error( crimson::ct_error::enoent::handle([this, &config] (auto) { super.uuid = uuid_d(); // TODO super.magic = 0xFF; // TODO - super.start = config.start; - super.end = config.end; + super.start = convert_paddr_to_blk_paddr( + config.start, + config.block_size, + config.blocks_per_segment); + super.end = convert_paddr_to_blk_paddr( + config.end, + config.block_size, + config.blocks_per_segment); super.block_size = config.block_size; super.size = config.total_size; super.free_block_count = config.total_size/config.block_size - 2; @@ -465,9 +475,14 @@ NVMeManager::write_ertr::future<> NVMeManager::sync_allocation( } NVMeManager::open_ertr::future<> NVMeManager::open( - const std::string &path, blk_paddr_t addr) + const std::string &path, paddr_t paddr) { logger().debug("open: path{}", path); + + blk_paddr_t addr = convert_paddr_to_blk_paddr( + paddr, + super.block_size, + super.blocks_per_segment); return _open_device(path ).safe_then([this, addr]() { return read_rbm_header(addr).safe_then([&](auto s) diff --git a/src/crimson/os/seastore/random_block_manager/nvme_manager.h b/src/crimson/os/seastore/random_block_manager/nvme_manager.h index 5ae66030d90..04ba5d12c52 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_manager.h +++ b/src/crimson/os/seastore/random_block_manager/nvme_manager.h @@ -186,7 +186,7 @@ public: mkfs_ertr::future<> mkfs(mkfs_config_t) final; read_ertr::future<> read(uint64_t addr, bufferptr &buffer) final; write_ertr::future<> write(uint64_t addr, bufferptr &buf) final; - open_ertr::future<> open(const std::string &path, blk_paddr_t start) final; + open_ertr::future<> open(const std::string &path, paddr_t start) final; close_ertr::future<> close() final; /* diff --git a/src/test/crimson/seastore/test_randomblock_manager.cc b/src/test/crimson/seastore/test_randomblock_manager.cc index 2973ef487dc..b92ae3444aa 100644 --- a/src/test/crimson/seastore/test_randomblock_manager.cc +++ b/src/test/crimson/seastore/test_randomblock_manager.cc @@ -64,8 +64,8 @@ struct rbm_test_t : public seastar_test_suite_t, reader->add_segment_manager(segment_manager.get()); device = new nvme_device::TestMemory(DEFAULT_TEST_SIZE); rbm_manager.reset(new NVMeManager(device, std::string())); - config.start = 0; - config.end = DEFAULT_TEST_SIZE; + config.start = paddr_t {0, 0, 0}; + config.end = paddr_t {0, 0, DEFAULT_TEST_SIZE}; config.block_size = DEFAULT_BLOCK_SIZE; config.total_size = DEFAULT_TEST_SIZE; } @@ -86,7 +86,11 @@ struct rbm_test_t : public seastar_test_suite_t, } auto read_rbm_header() { - return rbm_manager->read_rbm_header(config.start).unsafe_get0(); + blk_paddr_t addr = convert_paddr_to_blk_paddr( + config.start, + config.block_size, + config.blocks_per_segment); + return rbm_manager->read_rbm_header(addr).unsafe_get0(); } auto open() { @@ -283,8 +287,8 @@ TEST_F(rbm_test_t, block_alloc_free_test) TEST_F(rbm_test_t, many_block_alloc) { run_async([this] { - config.start = 0; - config.end = DEFAULT_TEST_SIZE * 1024; + config.start = paddr_t {0, 0, 0}; + config.end = paddr_t {0, 0, DEFAULT_TEST_SIZE * 1024}; config.block_size = DEFAULT_BLOCK_SIZE; config.total_size = DEFAULT_TEST_SIZE * 1024; mkfs(); -- 2.39.5