From 8865223260ff6fe5eff7d5ed94d70a35900afc29 Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Tue, 12 Oct 2021 22:48:17 +0900 Subject: [PATCH] seastore: add device_id_t in RBM Signed-off-by: Myoungwon Oh --- src/crimson/os/seastore/random_block_manager.h | 2 ++ .../os/seastore/random_block_manager/nvme_manager.cc | 7 ++++--- .../os/seastore/random_block_manager/nvme_manager.h | 5 +++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/crimson/os/seastore/random_block_manager.h b/src/crimson/os/seastore/random_block_manager.h index 2c2150c2a88..ee707478a2b 100644 --- a/src/crimson/os/seastore/random_block_manager.h +++ b/src/crimson/os/seastore/random_block_manager.h @@ -33,6 +33,7 @@ public: size_t block_size = 0; size_t total_size = 0; uint32_t blocks_per_segment = 1 << 18; + device_id_t device_id = 0; seastore_meta_t meta; }; using mkfs_ertr = crimson::errorator< @@ -95,6 +96,7 @@ public: virtual size_t get_block_size() const = 0; virtual uint64_t get_free_blocks() const = 0; virtual uint32_t get_blocks_per_segment() const = 0; + virtual device_id_t get_device_id() const = 0; virtual ~RandomBlockManager() {} }; using RandomBlockManagerRef = std::unique_ptr; 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 0a2cca569aa..8f37dfb8169 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_manager.cc +++ b/src/crimson/os/seastore/random_block_manager/nvme_manager.cc @@ -148,6 +148,7 @@ NVMeManager::mkfs_ertr::future<> NVMeManager::mkfs(mkfs_config_t config) super.crc = 0; super.feature |= RBM_BITMAP_BLOCK_CRC; super.blocks_per_segment = config.blocks_per_segment; + super.device_id = config.device_id; logger().debug(" super {} ", super); // write super block @@ -274,7 +275,7 @@ NVMeManager::allocate_ret NVMeManager::alloc_extent( p.first * super.block_size, super.block_size, super.blocks_per_segment, - 0); + super.device_id); size_t len = p.second * super.block_size; alloc_info.alloc_blk_ranges.push_back(std::make_pair(paddr, len)); alloc_info.op = rbm_alloc_delta_t::op_types_t::SET; @@ -287,7 +288,7 @@ NVMeManager::allocate_ret NVMeManager::alloc_extent( alloc_extent.range_start() * super.block_size, super.block_size, super.blocks_per_segment, - 0); + super.device_id); return allocate_ret( allocate_ertr::ready_future_marker{}, paddr); @@ -308,7 +309,7 @@ void NVMeManager::add_free_extent( from, super.block_size, super.blocks_per_segment, - 0); + super.device_id); rbm_alloc_delta_t alloc_info; alloc_info.alloc_blk_ranges.push_back(std::make_pair(paddr, len)); alloc_info.op = rbm_alloc_delta_t::op_types_t::CLEAR; 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 ad282691261..fa94cfea272 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_manager.h +++ b/src/crimson/os/seastore/random_block_manager/nvme_manager.h @@ -55,6 +55,7 @@ struct rbm_metadata_header_t { uint64_t flag; // reserved uint64_t feature; uint32_t blocks_per_segment; // the number of blocks in segment + device_id_t device_id; checksum_t crc; DENC(rbm_metadata_header_t, v, p) { @@ -72,6 +73,7 @@ struct rbm_metadata_header_t { denc(v.flag, p); denc(v.feature, p); denc(v.blocks_per_segment, p); + denc(v.device_id, p); denc(v.crc, p); DENC_FINISH(p); @@ -362,6 +364,9 @@ public: uint32_t get_blocks_per_segment() const final { return super.blocks_per_segment; } + device_id_t get_device_id() const final { + return super.device_id; + } private: /* -- 2.39.5