From: Yingxin Cheng Date: Thu, 6 Jan 2022 02:26:20 +0000 (+0800) Subject: crimson/os/seastore/../segment_manager: cleanup device_id usage X-Git-Tag: v17.1.0~80^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ecad0f8d689ad9b4e898d172947d038fd895c78a;p=ceph.git crimson/os/seastore/../segment_manager: cleanup device_id usage Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/segment_manager.h b/src/crimson/os/seastore/segment_manager.h index 9ac314c080e..7b501706420 100644 --- a/src/crimson/os/seastore/segment_manager.h +++ b/src/crimson/os/seastore/segment_manager.h @@ -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; }; diff --git a/src/crimson/os/seastore/segment_manager/block.cc b/src/crimson/os/seastore/segment_manager/block.cc index 6a8e2d7f87b..ea151bc5f81 100644 --- a/src/crimson/os/seastore/segment_manager/block.cc +++ b/src/crimson/os/seastore/segment_manager/block.cc @@ -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 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()) { diff --git a/src/crimson/os/seastore/segment_manager/block.h b/src/crimson/os/seastore/segment_manager/block.h index 27d39a287eb..e3b375127b7 100644 --- a/src/crimson/os/seastore/segment_manager/block.h +++ b/src/crimson/os/seastore/segment_manager/block.h @@ -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();