Skip to content

Commit 811f297

Browse files
committed
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 <[email protected]>
1 parent 721482a commit 811f297

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/os/bluestore/BlueStore.cc

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6035,13 +6035,29 @@ int BlueStore::write_meta(const std::string& key, const std::string& value)
60356035

60366036
int BlueStore::read_meta(const std::string& key, std::string *value)
60376037
{
6038-
if (!bdev || !bdev->supported_bdev_label()) {
6038+
BlockDevice* local_bdev = bdev;
6039+
auto close_bdev = make_scope_guard([&] {
6040+
if (!bdev && local_bdev) {
6041+
local_bdev->close();
6042+
delete local_bdev;
6043+
}
6044+
});
6045+
if (!local_bdev) {
6046+
string p = path + "/block";
6047+
local_bdev = BlockDevice::create(cct, p, nullptr, nullptr, nullptr, nullptr);
6048+
int r = local_bdev->open(p);
6049+
if (r < 0) {
6050+
delete local_bdev;
6051+
local_bdev = nullptr;
6052+
}
6053+
}
6054+
if (!local_bdev || !local_bdev->supported_bdev_label()) {
60396055
// skip bdev label section if not supported
60406056
return ObjectStore::read_meta(key, value);
60416057
}
60426058
string p = path + "/block";
60436059
if (bdev_label_valid_locations.empty()) {
6044-
_read_multi_bdev_label(cct, bdev, p, fsid, &bdev_label, &bdev_label_valid_locations,
6060+
_read_multi_bdev_label(cct, local_bdev, p, fsid, &bdev_label, &bdev_label_valid_locations,
60456061
&bdev_label_multi, &bdev_label_epoch);
60466062
}
60476063
if (!bdev_label_valid_locations.empty()) {

0 commit comments

Comments
 (0)