]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: print leaked extents to debug output 17303/head
authorSage Weil <sage@redhat.com>
Wed, 23 Aug 2017 19:12:32 +0000 (15:12 -0400)
committerKefu Chai <kchai@redhat.com>
Mon, 28 Aug 2017 13:03:42 +0000 (21:03 +0800)
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 13577a4f35d7b5ec4fad5d68ec3f750f8eb4e60e)

src/os/bluestore/BlueStore.cc

index 4c5cd0f634ade98093928d6e71eede86c21a0d8b..b87d0302b306a9fc5526e001391e0f67cf9f2b4d 100644 (file)
@@ -6062,10 +6062,25 @@ int BlueStore::fsck(bool deep)
     }
     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();
     }
   }