]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: check bluefs_extents consistency (DB vs. BlueFS) 23516/head
authorIgor Fedotov <ifedotov@suse.com>
Mon, 2 Jul 2018 17:13:09 +0000 (20:13 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Thu, 9 Aug 2018 21:46:23 +0000 (00:46 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/os/bluestore/BlueStore.cc

index 42318ab811143e929b08c648c39ea803b36eaa0a..fc0d1439fd33fe05595b16c39283f11ec9e5e7d6 100644 (file)
@@ -6018,6 +6018,26 @@ int BlueStore::_fsck(bool deep, bool repair)
   }
 
   if (bluefs) {
+    interval_set<uint64_t> 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<uint64_t> 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,