From 2ec14e17cc6e658882e0da9bfc3e7758e6ff3162 Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Mon, 2 Jul 2018 20:13:09 +0300 Subject: [PATCH] os/bluestore: check bluefs_extents consistency (DB vs. BlueFS) Signed-off-by: Igor Fedotov --- src/os/bluestore/BlueStore.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 42318ab811143..fc0d1439fd33f 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -6018,6 +6018,26 @@ int BlueStore::_fsck(bool deep, bool repair) } if (bluefs) { + interval_set bset; + r = bluefs->get_block_extents(bluefs_shared_bdev, &bset); + assert(r == 0); + if (!(bset == bluefs_extents)) { + dout(10) << __func__ << " bluefs says 0x" << std::hex << bset << std::dec + << dendl; + dout(10) << __func__ << " super says 0x" << std::hex << bluefs_extents + << std::dec << dendl; + + interval_set overlap; + overlap.intersection_of(bset, bluefs_extents); + + bset.subtract(overlap); + if (!bset.empty()) { + derr << "fsck error: bluefs extra 0x" << std::hex << bset << std::dec + << dendl; + ++errors; + } + } + for (auto e = bluefs_extents.begin(); e != bluefs_extents.end(); ++e) { apply( e.get_start(), e.get_len(), fm->get_alloc_size(), used_blocks, -- 2.39.5