]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: specify the device type explicitly when constructing BlockSegmen...
authorZhang Song <zhangsong325@gmail.com>
Mon, 6 Mar 2023 07:06:19 +0000 (15:06 +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 1e515e8561519ded43b1046942057d705441ee22)

src/crimson/os/seastore/device.cc
src/crimson/os/seastore/segment_manager.cc
src/crimson/os/seastore/segment_manager.h
src/crimson/os/seastore/segment_manager/block.cc
src/crimson/os/seastore/segment_manager/block.h

index fcc3a59aa29d4de36b2b44e452bc9287016eb042..c3bda82a7f6f74ac3e775d390395cda9551caa69 100644 (file)
@@ -36,7 +36,7 @@ seastar::future<DeviceRef>
 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;
     });
index bd02a460df83a7a211c9c944f12c00e71c28b62d..fe0967e455eb1926d1327b5e41370bb23f6e17cc 100644 (file)
@@ -44,7 +44,7 @@ std::ostream& operator<<(std::ostream &out, Segment::segment_state_t s)
 
 seastar::future<crimson::os::seastore::SegmentManagerRef>
 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<crimson::os::seastore::SegmentManagerRef>(
     std::make_unique<
       segment_manager::block::BlockSegmentManager
-    >(device + "/block"));
+    >(device + "/block", dtype));
 #endif
 }
 
index fc743efa850bd1d1fb7b2d1f60cd3fa5e1ad7c3d..b3e0d1618467261d6370861e663d5b0a6c8ced0b 100644 (file)
@@ -180,7 +180,8 @@ public:
 
   virtual ~SegmentManager() {}
 
-  static seastar::future<SegmentManagerRef> get_segment_manager(const std::string &device);
+  static seastar::future<SegmentManagerRef>
+  get_segment_manager(const std::string &device, device_type_t dtype);
 };
 
 }
index d0c34f36d82ae85eec79eb4a6520f5d152d2b11e..04b83b56c5fcc761feb0b55546f30d22c6306cbe 100644 (file)
@@ -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);
index 03662d5521e0d363a5400cf004180356004aec65..4fa715ba71ff483e50fe39b6661ec2f8c21f1905 100644 (file)
@@ -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();