From 1e515e8561519ded43b1046942057d705441ee22 Mon Sep 17 00:00:00 2001 From: Zhang Song Date: Mon, 6 Mar 2023 15:06:19 +0800 Subject: [PATCH] crimson/os/seastore: specify the device type explicitly when constructing BlockSegmentManager Signed-off-by: Zhang Song --- src/crimson/os/seastore/device.cc | 2 +- src/crimson/os/seastore/segment_manager.cc | 6 +++--- src/crimson/os/seastore/segment_manager.h | 3 ++- src/crimson/os/seastore/segment_manager/block.cc | 1 + src/crimson/os/seastore/segment_manager/block.h | 8 ++++++-- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/crimson/os/seastore/device.cc b/src/crimson/os/seastore/device.cc index fcc3a59aa29..c3bda82a7f6 100644 --- a/src/crimson/os/seastore/device.cc +++ b/src/crimson/os/seastore/device.cc @@ -36,7 +36,7 @@ seastar::future Device::make_device(const std::string& device, device_type_t dtype) { if (get_default_backend_of_device(dtype) == backend_type_t::SEGMENTED) { - return SegmentManager::get_segment_manager(device + return SegmentManager::get_segment_manager(device, dtype ).then([](DeviceRef ret) { return ret; }); diff --git a/src/crimson/os/seastore/segment_manager.cc b/src/crimson/os/seastore/segment_manager.cc index bd02a460df8..fe0967e455e 100644 --- a/src/crimson/os/seastore/segment_manager.cc +++ b/src/crimson/os/seastore/segment_manager.cc @@ -44,7 +44,7 @@ std::ostream& operator<<(std::ostream &out, Segment::segment_state_t s) seastar::future SegmentManager::get_segment_manager( - const std::string &device) + const std::string &device, device_type_t dtype) { #ifdef HAVE_ZNS LOG_PREFIX(SegmentManager::get_segment_manager); @@ -71,7 +71,7 @@ LOG_PREFIX(SegmentManager::get_segment_manager); } else { return std::make_unique< segment_manager::block::BlockSegmentManager - >(device + "/block"); + >(device + "/block", dtype); } }); }); @@ -79,7 +79,7 @@ LOG_PREFIX(SegmentManager::get_segment_manager); return seastar::make_ready_future( std::make_unique< segment_manager::block::BlockSegmentManager - >(device + "/block")); + >(device + "/block", dtype)); #endif } diff --git a/src/crimson/os/seastore/segment_manager.h b/src/crimson/os/seastore/segment_manager.h index fc743efa850..b3e0d161846 100644 --- a/src/crimson/os/seastore/segment_manager.h +++ b/src/crimson/os/seastore/segment_manager.h @@ -180,7 +180,8 @@ public: virtual ~SegmentManager() {} - static seastar::future get_segment_manager(const std::string &device); + static seastar::future + get_segment_manager(const std::string &device, device_type_t dtype); }; } diff --git a/src/crimson/os/seastore/segment_manager/block.cc b/src/crimson/os/seastore/segment_manager/block.cc index d0c34f36d82..04b83b56c5f 100644 --- a/src/crimson/os/seastore/segment_manager/block.cc +++ b/src/crimson/os/seastore/segment_manager/block.cc @@ -516,6 +516,7 @@ BlockSegmentManager::mkfs_ret BlockSegmentManager::mkfs( device_config_t sm_config) { LOG_PREFIX(BlockSegmentManager::mkfs); + ceph_assert(sm_config.spec.dtype == superblock.config.spec.dtype); set_device_id(sm_config.spec.id); INFO("{} path={}, {}", device_id_printer_t{get_device_id()}, device_path, sm_config); diff --git a/src/crimson/os/seastore/segment_manager/block.h b/src/crimson/os/seastore/segment_manager/block.h index 03662d5521e..4fa715ba71f 100644 --- a/src/crimson/os/seastore/segment_manager/block.h +++ b/src/crimson/os/seastore/segment_manager/block.h @@ -118,8 +118,12 @@ public: close_ertr::future<> close(); BlockSegmentManager( - const std::string &path) - : device_path(path) {} + const std::string &path, + device_type_t dtype) + : device_path(path) { + ceph_assert(get_device_type() == device_type_t::NONE); + superblock.config.spec.dtype = dtype; + } ~BlockSegmentManager(); -- 2.39.5