]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/../segment_manager: cleanup device_id usage
authorYingxin Cheng <yingxin.cheng@intel.com>
Thu, 6 Jan 2022 02:26:20 +0000 (10:26 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 12 Jan 2022 05:43:52 +0000 (13:43 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/segment_manager.h
src/crimson/os/seastore/segment_manager/block.cc
src/crimson/os/seastore/segment_manager/block.h

index 9ac314c080ea9c8a66e09a520caf2e244ffe7214..7b501706420a75f83b895614eb84f03de3f09595 100644 (file)
@@ -50,7 +50,7 @@ struct block_sm_superblock_t {
   bool major_dev = false;
   magic_t magic = 0;
   device_type_t dtype = device_type_t::NONE;
-  device_id_t device_id = 0;
+  device_id_t device_id = DEVICE_ID_NULL;
 
   seastore_meta_t meta;
 
@@ -81,7 +81,7 @@ struct segment_manager_config_t {
   bool major_dev = false;
   magic_t magic = 0;
   device_type_t dtype = device_type_t::NONE;
-  device_id_t device_id = 0;
+  device_id_t device_id = DEVICE_ID_NULL;
   seastore_meta_t meta;
   secondary_device_set_t secondary_devices;
 };
index 6a8e2d7f87be0b70b7bf6d501d60ddb2b36d7c71..ea151bc5f81781ee26752a4278e62eb1a5630033 100644 (file)
@@ -329,7 +329,7 @@ Segment::write_ertr::future<> BlockSegment::write(
 Segment::close_ertr::future<> BlockSegmentManager::segment_close(
     segment_id_t id, segment_off_t write_pointer)
 {
-  assert(id.device_id() == superblock.device_id);
+  assert(id.device_id() == get_device_id());
   auto s_id = id.device_segment_id();
   assert(tracker);
   tracker->set(s_id, segment_state_t::CLOSED);
@@ -374,6 +374,7 @@ BlockSegmentManager::mount_ret BlockSegmentManager::mount()
     auto sd = p.second;
     return read_superblock(device, sd);
   }).safe_then([=](auto sb) {
+    set_device_id(sb.device_id);
     INFO("device {} path={} read {}", get_device_id(), device_path, sb);
     superblock = sb;
     stats.data_read.increment(
@@ -404,6 +405,7 @@ BlockSegmentManager::mkfs_ret BlockSegmentManager::mkfs(
   segment_manager_config_t sm_config)
 {
   LOG_PREFIX(BlockSegmentManager::mkfs);
+  set_device_id(sm_config.device_id);
   DEBUG("path={}, {}", device_path, sm_config);
   return seastar::do_with(
     seastar::file{},
@@ -455,7 +457,7 @@ SegmentManager::open_ertr::future<SegmentRef> BlockSegmentManager::open(
   segment_id_t id)
 {
   LOG_PREFIX(BlockSegmentManager::open);
-  assert(id.device_id() == superblock.device_id);
+  assert(id.device_id() == get_device_id());
   auto s_id = id.device_segment_id();
   if (s_id >= get_num_segments()) {
     ERROR("invalid segment {}", id);
@@ -483,7 +485,7 @@ SegmentManager::release_ertr::future<> BlockSegmentManager::release(
 {
   LOG_PREFIX(BlockSegmentManager::release);
   DEBUG("releasing segment {}", id);
-  assert(id.device_id() == superblock.device_id);
+  assert(id.device_id() == get_device_id());
 
   auto s_id = id.device_segment_id();
   if (s_id >= get_num_segments()) {
index 27d39a287eb6a9df0636cc168bfdef75dc613f12..e3b375127b715d38eeb506d1f8e131b149fcf930 100644 (file)
@@ -140,7 +140,8 @@ public:
   }
 
   device_id_t get_device_id() const final {
-    return superblock.device_id;
+    assert(device_id <= DEVICE_ID_MAX_VALID);
+    return device_id;
   }
   secondary_device_set_t& get_secondary_devices() final {
     return superblock.secondary_devices;
@@ -154,7 +155,7 @@ public:
   device_spec_t get_device_spec() const final {
     return {superblock.magic,
            superblock.dtype,
-           superblock.device_id};
+           get_device_id()};
   }
 
   magic_t get_magic() const final {
@@ -203,7 +204,13 @@ private:
   block_sm_superblock_t superblock;
   seastar::file device;
 
-  device_id_t device_id = 0;
+  void set_device_id(device_id_t id) {
+    assert(id <= DEVICE_ID_MAX_VALID);
+    assert(device_id == DEVICE_ID_NULL ||
+           device_id == id);
+    device_id = id;
+  }
+  device_id_t device_id = DEVICE_ID_NULL;
 
   size_t get_offset(paddr_t addr) {
     auto& seg_addr = addr.as_seg_paddr();