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;
});
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);
} else {
return std::make_unique<
segment_manager::block::BlockSegmentManager
- >(device + "/block");
+ >(device + "/block", dtype);
}
});
});
return seastar::make_ready_future<crimson::os::seastore::SegmentManagerRef>(
std::make_unique<
segment_manager::block::BlockSegmentManager
- >(device + "/block"));
+ >(device + "/block", dtype));
#endif
}
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);
};
}
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);
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();