]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: print leaked extents to debug output 17225/head
authorSage Weil <sage@redhat.com>
Wed, 23 Aug 2017 19:12:32 +0000 (15:12 -0400)
committerSage Weil <sage@redhat.com>
Fri, 25 Aug 2017 02:31:39 +0000 (22:31 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc

index e3663b4081d1d3ebc40565c778ec3406de0ace01..541ac20abc02ebed3a23c8140544e8a70d2f990c 100644 (file)
@@ -6000,10 +6000,25 @@ int BlueStore::fsck(bool deep)
     size_t count = used_blocks.count();
     if (used_blocks.size() != count) {
       assert(used_blocks.size() > count);
-      derr << __func__ << " error: leaked some space;"
-          << (used_blocks.size() - count) * min_alloc_size
-          << " bytes leaked" << dendl;
       ++errors;
+      used_blocks.flip();
+      size_t start = used_blocks.find_first();
+      while (start != decltype(used_blocks)::npos) {
+       size_t cur = start;
+       while (true) {
+         size_t next = used_blocks.find_next(cur);
+         if (next != cur + 1) {
+           derr << __func__ << " error: leaked extent 0x" << std::hex
+                << ((uint64_t)start * block_size) << "~"
+                << ((cur + 1 - start) * block_size) << std::dec
+                << dendl;
+           start = next;
+           break;
+         }
+         cur = next;
+       }
+      }
+      used_blocks.flip();
     }
   }