From: Igor Fedotov Date: Thu, 14 Jun 2018 14:25:52 +0000 (+0300) Subject: os/bluestore: avoid superblock overwrite for tiny devices. X-Git-Tag: v14.0.1~612^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2b30b495aeb768d30ef2aa94bb90a970377bae1a;p=ceph.git os/bluestore: avoid superblock overwrite for tiny devices. This was caused by bluefs extent miscalculation. Fixes: https://tracker.ceph.com/issues/24480 Signed-off-by: Igor Fedotov --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 973a467bdd02..03212fc16863 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -4930,6 +4930,10 @@ int BlueStore::_open_db(bool create, bool to_repair_db) // put bluefs in the middle of the device in case it is an HDD uint64_t start = p2align((bdev->get_size() - initial) / 2, cct->_conf->bluefs_alloc_size); + //avoiding superblock overwrite + assert(cct->_conf->bluefs_alloc_size > _get_ondisk_reserved()); + start = std::max(cct->_conf->bluefs_alloc_size, start); + bluefs->add_block_extent(bluefs_shared_bdev, start, initial); bluefs_extents.insert(start, initial); }