From ee362b8e59a57fbe51b3b721d7264b9e17514838 Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Fri, 2 Feb 2024 12:25:16 +0000 Subject: [PATCH] os/bluestore: Hack for fsck with multi label Config bluestore_bdev_label_require_all interferes with fsck / repair. For those functions disable the flag. Signed-off-by: Adam Kupczyk (cherry picked from commit 733a4513e56dcb869204c59abfbbc129b89b05d6) --- src/os/bluestore/BlueStore.cc | 9 ++++++++- src/os/bluestore/BlueStore.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index ff2fe17e88fa4..96f8a64da0bd7 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -5660,6 +5660,7 @@ BlueStore::BlueStore(CephContext *cct, _init_logger(); cct->_conf.add_observer(this); set_cache_shards(1); + bluestore_bdev_label_require_all = cct->_conf.get_val("bluestore_bdev_label_require_all"); } BlueStore::~BlueStore() @@ -6820,7 +6821,7 @@ int BlueStore::_check_or_set_main_bdev_label( << " does not match our fsid " << fsid << dendl; return -EIO; } - if (cct->_conf.get_val("bluestore_bdev_label_require_all")) { + if (bluestore_bdev_label_require_all) { if (r != 0) { derr << __func__ << "not all labels read properly" << dendl; return -EIO; @@ -10260,8 +10261,14 @@ int BlueStore::_fsck(BlueStore::FSCKDepth depth, bool repair) derr << __func__ << " fsck error: no valid block device label found" << dendl; return r; } + // hack - sanitize check for bdev label + bluestore_bdev_label_require_all = false; } + auto restore_option = make_scope_guard([&] { + bluestore_bdev_label_require_all = cct->_conf.get_val("bluestore_bdev_label_require_all"); + }); + // in deep mode we need R/W write access to be able to replay deferred ops const bool read_only = !(repair || depth == FSCK_DEEP); int r = _open_db_and_around(read_only); diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 4e35715c909c2..47b501f141974 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2445,6 +2445,7 @@ private: std::vector bdev_label_valid_locations; // this has any elements bool bdev_label_multi = false; int64_t bdev_label_epoch = -1; + bool bluestore_bdev_label_require_all = false; typedef std::map osd_pools_map; -- 2.39.5