From fc641b677fefbc38bb6be0b90576199492a51339 Mon Sep 17 00:00:00 2001 From: Zhang Song Date: Tue, 10 Jan 2023 17:01:30 +0800 Subject: [PATCH] crimson/os/seastore: make segment_manager work with HDD Signed-off-by: Zhang Song (cherry picked from commit 89939e7ad7c1dffaa1c842be601fa372d074a86a) --- src/crimson/os/seastore/segment_manager.h | 7 ++----- src/crimson/os/seastore/segment_manager/block.h | 3 +++ src/crimson/os/seastore/segment_manager/ephemeral.h | 4 ++++ src/crimson/os/seastore/segment_manager/zns.h | 4 ++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/crimson/os/seastore/segment_manager.h b/src/crimson/os/seastore/segment_manager.h index 9413e9933db..fc743efa850 100644 --- a/src/crimson/os/seastore/segment_manager.h +++ b/src/crimson/os/seastore/segment_manager.h @@ -58,7 +58,8 @@ struct block_sm_superblock_t { ceph_assert(first_segment_offset > tracker_offset && first_segment_offset % block_size == 0); ceph_assert(config.spec.magic != 0); - ceph_assert(config.spec.dtype == device_type_t::SSD); + ceph_assert(get_default_backend_of_device(config.spec.dtype) == + backend_type_t::SEGMENTED); ceph_assert(config.spec.id <= DEVICE_ID_MAX_VALID); if (!config.major_dev) { ceph_assert(config.secondary_devices.size() == 0); @@ -154,10 +155,6 @@ using SegmentManagerRef = std::unique_ptr; class SegmentManager : public Device { public: - device_type_t get_device_type() const final { - return device_type_t::SSD; - } - backend_type_t get_backend_type() const final { return backend_type_t::SEGMENTED; } diff --git a/src/crimson/os/seastore/segment_manager/block.h b/src/crimson/os/seastore/segment_manager/block.h index 0807534ab84..03662d5521e 100644 --- a/src/crimson/os/seastore/segment_manager/block.h +++ b/src/crimson/os/seastore/segment_manager/block.h @@ -132,6 +132,9 @@ public: size_t len, ceph::bufferptr &out) final; + device_type_t get_device_type() const final { + return superblock.config.spec.dtype; + } size_t get_available_size() const final { return superblock.size; } diff --git a/src/crimson/os/seastore/segment_manager/ephemeral.h b/src/crimson/os/seastore/segment_manager/ephemeral.h index dc7b33f809b..773992c7e6d 100644 --- a/src/crimson/os/seastore/segment_manager/ephemeral.h +++ b/src/crimson/os/seastore/segment_manager/ephemeral.h @@ -69,6 +69,10 @@ class EphemeralSegmentManager final : public SegmentManager { const ephemeral_config_t config; std::optional device_config; + device_type_t get_device_type() const final { + return device_type_t::SEGMENTED_EPHEMERAL; + } + size_t get_offset(paddr_t addr) { auto& seg_addr = addr.as_seg_paddr(); return (seg_addr.get_segment_id().device_segment_id() * config.segment_size) + diff --git a/src/crimson/os/seastore/segment_manager/zns.h b/src/crimson/os/seastore/segment_manager/zns.h index a1f10d14080..ad8c3b4fe3b 100644 --- a/src/crimson/os/seastore/segment_manager/zns.h +++ b/src/crimson/os/seastore/segment_manager/zns.h @@ -115,6 +115,10 @@ namespace crimson::os::seastore::segment_manager::zns { size_t len, ceph::bufferptr &out) final; + device_type_t get_device_type() const final { + return device_type_t::ZNS; + } + size_t get_available_size() const final { return metadata.size; }; -- 2.39.5