From 1e9de00aa8559a6c17cac7e88bbe757241806e5e Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Mon, 13 Feb 2023 10:54:41 +0900 Subject: [PATCH] crimson/os/seastore/rbm: In mkfs, add open() before write_rbm_header() Signed-off-by: Myoungwon Oh --- .../random_block_manager/nvme_block_device.cc | 18 +++++++++++++----- .../random_block_manager/nvme_block_device.h | 4 ++++ .../seastore/random_block_manager/rbm_device.h | 7 +++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc b/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc index 48896ccdf5e..7598b8d6456 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc +++ b/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc @@ -40,13 +40,21 @@ RBMDevice::mkfs_ret RBMDevice::do_mkfs(device_config_t config) { assert(super.size >= super.journal_size); DEBUG("super {} ", super); // write super block - return write_rbm_header( - ).safe_then([] { - return mkfs_ertr::now(); - }).handle_error( + return open(get_device_path(), + seastar::open_flags::rw | seastar::open_flags::dsync + ).handle_error( mkfs_ertr::pass_further{}, crimson::ct_error::assert_all{ - "Invalid error write_rbm_header in RBMDevice::mkfs" + "Invalid error open in RBMDevice::mkfs"} + ).safe_then([this] { + return write_rbm_header( + ).safe_then([this] { + return close(); + }).handle_error( + mkfs_ertr::pass_further{}, + crimson::ct_error::assert_all{ + "Invalid error write_rbm_header in RBMDevice::mkfs" + }); }); }); } diff --git a/src/crimson/os/seastore/random_block_manager/nvme_block_device.h b/src/crimson/os/seastore/random_block_manager/nvme_block_device.h index 689893105d3..03db41d8fb0 100644 --- a/src/crimson/os/seastore/random_block_manager/nvme_block_device.h +++ b/src/crimson/os/seastore/random_block_manager/nvme_block_device.h @@ -245,6 +245,10 @@ public: }); } + std::string get_device_path() const final { + return device_path; + } + uint64_t get_preffered_write_granularity() const { return write_granularity; } uint64_t get_preffered_write_alignment() const { return write_alignment; } uint64_t get_atomic_write_unit() const { return atomic_write_unit; } diff --git a/src/crimson/os/seastore/random_block_manager/rbm_device.h b/src/crimson/os/seastore/random_block_manager/rbm_device.h index e7efac0600e..d58af939b7a 100644 --- a/src/crimson/os/seastore/random_block_manager/rbm_device.h +++ b/src/crimson/os/seastore/random_block_manager/rbm_device.h @@ -160,6 +160,8 @@ public: read_ertr::future; virtual stat_device_ret stat_device() = 0; + virtual std::string get_device_path() const = 0; + uint64_t get_journal_size() const { return super.journal_size; } @@ -247,6 +249,11 @@ public: stat ); } + + std::string get_device_path() const final { + return ""; + } + char *buf; }; using EphemeralRBMDeviceRef = std::unique_ptr; -- 2.39.5