From: Adam Kupczyk Date: Fri, 12 Jul 2024 08:04:41 +0000 (+0000) Subject: os/bluestore: Modify read_meta() X-Git-Tag: v19.2.1~271^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=35b835c082001f486411b7868fa3be1792c1d579;p=ceph.git os/bluestore: Modify read_meta() When bdev is not opened, do not fallback to file-backed values immediately. First try to open temporary open bdev. Signed-off-by: Adam Kupczyk (cherry picked from commit 811f2979f53201d7bf296e11e7ea62e493abe471) --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 74f0f5845ec6d..0f659d951b55a 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -6029,13 +6029,29 @@ int BlueStore::write_meta(const std::string& key, const std::string& value) int BlueStore::read_meta(const std::string& key, std::string *value) { - if (!bdev || !bdev->supported_bdev_label()) { + BlockDevice* local_bdev = bdev; + auto close_bdev = make_scope_guard([&] { + if (!bdev && local_bdev) { + local_bdev->close(); + delete local_bdev; + } + }); + if (!local_bdev) { + string p = path + "/block"; + local_bdev = BlockDevice::create(cct, p, nullptr, nullptr, nullptr, nullptr); + int r = local_bdev->open(p); + if (r < 0) { + delete local_bdev; + local_bdev = nullptr; + } + } + if (!local_bdev || !local_bdev->supported_bdev_label()) { // skip bdev label section if not supported return ObjectStore::read_meta(key, value); } string p = path + "/block"; if (bdev_label_valid_locations.empty()) { - _read_multi_bdev_label(cct, bdev, p, fsid, &bdev_label, &bdev_label_valid_locations, + _read_multi_bdev_label(cct, local_bdev, p, fsid, &bdev_label, &bdev_label_valid_locations, &bdev_label_multi, &bdev_label_epoch); } if (!bdev_label_valid_locations.empty()) {