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;
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;
};
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);
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(
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{},
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);
{
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()) {
}
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;
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 {
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();