]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: make segment_manager work with HDD
authorZhang Song <zhangsong325@gmail.com>
Tue, 10 Jan 2023 09:01:30 +0000 (17:01 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Tue, 23 May 2023 08:03:21 +0000 (08:03 +0000)
Signed-off-by: Zhang Song <zhangsong325@gmail.com>
(cherry picked from commit 89939e7ad7c1dffaa1c842be601fa372d074a86a)

src/crimson/os/seastore/segment_manager.h
src/crimson/os/seastore/segment_manager/block.h
src/crimson/os/seastore/segment_manager/ephemeral.h
src/crimson/os/seastore/segment_manager/zns.h

index 9413e9933db78a134a321cdcb9c73b06e0182023..fc743efa850bd1d1fb7b2d1f60cd3fa5e1ad7c3d 100644 (file)
@@ -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<SegmentManager>;
 
 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;
   }
index 0807534ab8427bb5135f2e16cad6d6c77ec41bf2..03662d5521e0d363a5400cf004180356004aec65 100644 (file)
@@ -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;
   }
index dc7b33f809bcfab06a80dd283ed202c516064c91..773992c7e6d7f46f5f92a92411e63e93dee6f418 100644 (file)
@@ -69,6 +69,10 @@ class EphemeralSegmentManager final : public SegmentManager {
   const ephemeral_config_t config;
   std::optional<device_config_t> 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) +
index a1f10d14080e2f55d0abf7038b8beb1aef5a4981..ad8c3b4fe3b6815ca9796038f4689733be95d8c0 100644 (file)
@@ -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;
     };