From: Sage Weil Date: Wed, 23 Aug 2017 19:12:32 +0000 (-0400) Subject: os/bluestore: print leaked extents to debug output X-Git-Tag: v13.0.1~1180^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F17225%2Fhead;p=ceph.git os/bluestore: print leaked extents to debug output Signed-off-by: Sage Weil --- 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(); } }