From 13577a4f35d7b5ec4fad5d68ec3f750f8eb4e60e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 23 Aug 2017 15:12:32 -0400 Subject: [PATCH] os/bluestore: print leaked extents to debug output Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index e3663b4081d1d..541ac20abc02e 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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(); } } -- 2.39.5