]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/rbm: use device_config_t in rbm_metadata_header_t
authormyoungwon oh <ohmyoungwon@gmail.com>
Thu, 13 Oct 2022 12:38:15 +0000 (21:38 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Tue, 18 Oct 2022 02:32:38 +0000 (11:32 +0900)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/crimson/os/seastore/random_block_manager.h
src/crimson/os/seastore/random_block_manager/block_rb_manager.cc
src/crimson/os/seastore/random_block_manager/nvme_block_device.cc
src/crimson/os/seastore/random_block_manager/rbm_device.h
src/test/crimson/seastore/test_randomblock_manager.cc

index 1158e32befd71bb1cbb062cc9a9597d7385b341f..718edfb59946c78526b4f762d2068cf3b952cf88 100644 (file)
 
 #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);
   }
 
index 80acffd726d70734e5cd5c178e94132a84266d85..2e8754bfd410ec392d1e2783a20b7b893b06ffab 100644 (file)
@@ -166,13 +166,10 @@ std::ostream &operator<<(std::ostream &out, const rbm_metadata_header_t &header)
   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 << ")";
 }
 
index 2a3d52947a306c196fbb6a0d5cfadb58ebfcbe72..e6b7d449f9f33cce751122a2e6a400530f2e2efa 100644 (file)
@@ -12,6 +12,7 @@
 #include "include/buffer.h"
 #include "rbm_device.h"
 #include "nvme_block_device.h"
+#include "block_rb_manager.h"
 
 namespace {
   seastar::logger& logger() {
@@ -25,13 +26,12 @@ SET_SUBSYS(seastore_device);
 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(
@@ -96,6 +96,8 @@ read_ertr::future<rbm_metadata_header_t> RBMDevice::read_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) {
index 9264b104414333299632b025b8484511855b27f4..b2565fffda0eee84ca8e56348a60bfefda7c1887 100644 (file)
@@ -88,9 +88,6 @@ protected:
   // 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() {}
@@ -102,10 +99,10 @@ public:
   }
 
   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) {
@@ -113,7 +110,7 @@ public:
   }
 
   magic_t get_magic() const final {
-    return magic_t();
+    return super.config.spec.magic;
   }
 
   device_type_t get_device_type() const final {
@@ -125,11 +122,11 @@ public:
   }
 
   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; }
index be748393cf3f60ba6aa588ec5dac36bd061a6f30..05b97e440bbbd8a1fc07d6bd983b9d27678b43c1 100644 (file)
@@ -47,7 +47,6 @@ struct rbm_test_t :
   const uint64_t block_size = DEFAULT_BLOCK_SIZE;
 
   device_config_t config;
-  paddr_t current;
 
   rbm_test_t() = default;
 
@@ -121,14 +120,14 @@ TEST_F(rbm_test_t, mkfs_test)
    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 
    );
  });
 }