From: myoungwon oh Date: Mon, 13 Feb 2023 01:54:41 +0000 (+0900) Subject: crimson/os/seastore/rbm: In mkfs, add open() before write_rbm_header() X-Git-Tag: v18.1.0~271^2~9 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1e9de00aa8559a6c17cac7e88bbe757241806e5e;p=ceph.git crimson/os/seastore/rbm: In mkfs, add open() before write_rbm_header() Signed-off-by: Myoungwon Oh --- 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 48896ccdf5e32..7598b8d645611 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 689893105d357..03db41d8fb047 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 e7efac0600ea5..d58af939b7a51 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;