]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: avoid superblock overwrite for tiny devices.
authorIgor Fedotov <ifedotov@suse.com>
Thu, 14 Jun 2018 14:25:52 +0000 (17:25 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Mon, 30 Jul 2018 21:49:39 +0000 (00:49 +0300)
This was caused by bluefs extent miscalculation.

Fixes: https://tracker.ceph.com/issues/24480
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/os/bluestore/BlueStore.cc

index 973a467bdd0270b3e3f174c709640f9262e9a346..03212fc16863480ca7d1aa3e4654eed7d3d7b46e 100644 (file)
@@ -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);
     }