From 32d05492503b75711b082e45ac048f0997017fe8 Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Thu, 12 Sep 2024 10:45:05 +0000 Subject: [PATCH] tools/ceph-bluestore-tool: remove param zap_size Make zapping precisely target block device labels. Signed-off-by: Adam Kupczyk (cherry picked from commit 1a80319bbff39f25a09d1fc6f8cd975ed1e3748b) Conflicts: src/os/bluestore/BlueStore.cc src/os/bluestore/BlueStore.h src/os/bluestore/bluestore_tool.cc Trivial conficts with 'trim' feature. --- src/os/bluestore/BlueStore.cc | 26 +++++++++----------------- src/os/bluestore/BlueStore.h | 2 +- src/os/bluestore/bluestore_tool.cc | 4 +--- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 3b1e97c2b82..c883f6fb7db 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -8895,27 +8895,20 @@ int BlueStore::dump_bluefs_sizes(ostream& out) return r; } -int BlueStore::zap_device(CephContext* cct, const string& dev, uint64_t gap_size) +int BlueStore::zap_device(CephContext* cct, const string& dev) { - string path; // dummy var for dout - dout(5)<< __func__ << " " << dev << dendl; - auto * _bdev = - BlockDevice::create(cct, dev, nullptr, nullptr, nullptr, nullptr); + string path = dev; // dummy var for dout + uint64_t brush_size; + dout(5) << __func__ << " " << dev << dendl; + unique_ptr + _bdev(BlockDevice::create(cct, dev, nullptr, nullptr, nullptr, nullptr)); int r = _bdev->open(dev); if (r < 0) goto fail; - if (!gap_size) { - gap_size = _bdev->get_block_size(); - } - if (p2align(gap_size, _bdev->get_block_size()) != gap_size) { - derr << __func__ - << " zapping size has to be aligned with device block size: 0x" - << std::hex << gap_size << " vs. 0x" << _bdev->get_block_size() - << std::dec << dendl; - return -EINVAL; - } + brush_size = std::max(_bdev->get_block_size(), BDEV_LABEL_BLOCK_SIZE); + for (auto off : bdev_label_positions) { - uint64_t end = std::min(off + gap_size, _bdev->get_size()); + uint64_t end = std::min(off + brush_size, _bdev->get_size()); if (end > off) { uint64_t l = end - off; bufferlist bl; @@ -8937,7 +8930,6 @@ int BlueStore::zap_device(CephContext* cct, const string& dev, uint64_t gap_size } } -fail_close: _bdev->close(); fail: diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 224620a620c..07690d54b0f 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -3084,7 +3084,7 @@ public: std::string get_device_path(unsigned id); int dump_bluefs_sizes(std::ostream& out); - static int zap_device(CephContext* cct, const std::string& dev, uint64_t gap_size); + static int zap_device(CephContext* cct, const std::string& dev); public: int statfs(struct store_statfs_t *buf, diff --git a/src/os/bluestore/bluestore_tool.cc b/src/os/bluestore/bluestore_tool.cc index 25b2e977455..44129db6785 100644 --- a/src/os/bluestore/bluestore_tool.cc +++ b/src/os/bluestore/bluestore_tool.cc @@ -289,7 +289,6 @@ int main(int argc, char **argv) string new_sharding = empty_sharding; string resharding_ctrl; int log_level = 30; - uint64_t zap_size = 0; bool fsck_deep = false; po::options_description po_options("Options"); po_options.add_options() @@ -311,7 +310,6 @@ int main(int argc, char **argv) ("yes-i-really-really-mean-it", "additional confirmation for dangerous commands") ("sharding", po::value(&new_sharding), "new sharding to apply") ("resharding-ctrl", po::value(&resharding_ctrl), "gives control over resharding procedure details") - ("zap-size", po::value(&zap_size), "size of a block written when zapping device") ; po::options_description po_positional("Positional options"); po_positional.add_options() @@ -1206,7 +1204,7 @@ int main(int argc, char **argv) cout << sharding << std::endl; } else if (action == "zap-device") { for(auto& dev : devs) { - int r = BlueStore::zap_device(cct.get(), dev, zap_size); + int r = BlueStore::zap_device(cct.get(), dev); if (r < 0) { cerr << "error from zap: " << cpp_strerror(r) << std::endl; exit(EXIT_FAILURE); -- 2.39.5