#include "crimson/common/layout.h"
#include "include/buffer.h"
-#include "include/uuid.h"
-
+#include "crimson/os/seastore/device.h"
namespace crimson::os::seastore {
struct rbm_metadata_header_t {
size_t size = 0;
size_t block_size = 0;
- uint64_t start; // start location of the device
- uint64_t end; // end location of the device
- uint64_t magic; // to indicate randomblock_manager
- uuid_d uuid;
- uint32_t start_data_area;
- uint64_t flag; // reserved
- uint64_t feature;
- device_id_t device_id;
- checksum_t crc;
+ uint64_t start = 0; // start location of the device
+ uint64_t feature = 0;
+ uint32_t start_data_area = 0;
+ checksum_t crc = 0;
+ device_config_t config;
DENC(rbm_metadata_header_t, v, p) {
DENC_START(1, 1, p);
denc(v.size, p);
denc(v.block_size, p);
denc(v.start, p);
- denc(v.end, p);
- denc(v.magic, p);
- denc(v.uuid, p);
- denc(v.start_data_area, p);
- denc(v.flag, p);
denc(v.feature, p);
- denc(v.device_id, p);
+ denc(v.start_data_area, p);
denc(v.crc, p);
+ denc(v.config, p);
DENC_FINISH(p);
}
out << " rbm_metadata_header_t(size=" << header.size
<< ", block_size=" << header.block_size
<< ", start=" << header.start
- << ", end=" << header.end
- << ", magic=" << header.magic
- << ", uuid=" << header.uuid
<< ", start_data_area=" << header.start_data_area
- << ", flag=" << header.flag
<< ", feature=" << header.feature
- << ", crc=" << header.crc;
+ << ", crc=" << header.crc
+ << ", config=" << header.config;
return out << ")";
}
#include "include/buffer.h"
#include "rbm_device.h"
#include "nvme_block_device.h"
+#include "block_rb_manager.h"
namespace {
seastar::logger& logger() {
RBMDevice::mkfs_ret RBMDevice::mkfs(device_config_t config) {
LOG_PREFIX(RBMDevice::mkfs);
super.start = 0;
- super.end = get_available_size();
super.block_size = get_block_size();
super.size = get_available_size();
super.start_data_area = 0;
super.feature |= RBM_BITMAP_BLOCK_CRC;
- super.device_id = config.spec.id;
+ super.config = std::move(config);
DEBUG("super {} ", super);
// write super block
return write_rbm_header(
bufferlist meta_b_header;
super_block.crc = 0;
encode(super_block, meta_b_header);
+ assert(ceph::encoded_sizeof<rbm_metadata_header_t>(super_block) <
+ super_block.block_size);
// Do CRC verification only if data protection is not supported.
if (is_data_protection_enabled() == false) {
// LBA Size
uint64_t block_size = 4096;
- device_id_t device_id;
- seastore_meta_t meta;
- secondary_device_set_t devices;
rbm_metadata_header_t super;
public:
RBMDevice() {}
}
device_id_t get_device_id() const {
- return device_id;
+ return super.config.spec.id;
}
void set_device_id(device_id_t id) {
- device_id = id;
+ super.config.spec.id = id;
}
void set_block_size(uint64_t bs) {
}
magic_t get_magic() const final {
- return magic_t();
+ return super.config.spec.magic;
}
device_type_t get_device_type() const final {
}
const seastore_meta_t &get_meta() const final {
- return meta;
+ return super.config.meta;
}
secondary_device_set_t& get_secondary_devices() final {
- return devices;
+ return super.config.secondary_devices;
}
std::size_t get_available_size() const final { return size; }
extent_len_t get_block_size() const final { return block_size; }
const uint64_t block_size = DEFAULT_BLOCK_SIZE;
device_config_t config;
- paddr_t current;
rbm_test_t() = default;
auto super = read_rbm_header();
ASSERT_TRUE(
super.block_size == DEFAULT_BLOCK_SIZE &&
- super.end == DEFAULT_TEST_SIZE
+ super.size == DEFAULT_TEST_SIZE
);
device->set_block_size(8196);
mkfs();
super = read_rbm_header();
ASSERT_TRUE(
super.block_size == 8196 &&
- super.end == DEFAULT_TEST_SIZE
+ super.size == DEFAULT_TEST_SIZE
);
});
}