From: Adam Kupczyk Date: Wed, 18 Sep 2024 07:32:09 +0000 (+0000) Subject: os/bluestore: Move reservation of bdev label to proper place. X-Git-Tag: v20.0.0~979^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9dd0b2369f9c07548074f778ad47614f9d7caa4e;p=ceph.git os/bluestore: Move reservation of bdev label to proper place. Reservation (alloc->init_rm_free) was after reopening DB in r/w mode. This was a problem - as soon as DB is in r/w it can flush sst or compact, which will make allocations. Fixes: https://tracker.ceph.com/issues/67911 Signed-off-by: Adam Kupczyk --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 236336386728..4e0d9e099226 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -7724,6 +7724,10 @@ int BlueStore::_open_db_and_around(bool read_only, bool to_repair) if (r < 0) goto out_fm; + if (bdev_label_multi) { + _main_bdev_label_try_reserve(); + } + // Re-open in the proper mode(s). // Can't simply bypass second open for read-only mode as we need to @@ -7740,10 +7744,6 @@ int BlueStore::_open_db_and_around(bool read_only, bool to_repair) _post_init_alloc(); } - if (bdev_label_multi) { - _main_bdev_label_try_reserve(); - } - // when function is called in repair mode (to_repair=true) we skip db->open()/create() // we can't change bluestore allocation so no need to invlidate allocation-file if (fm->is_null_manager() && !read_only && !to_repair) {