Hi all, As part of merging the parent pointers patchset into my development branch, I noticed a few problems with the GETFSMAP implementation for XFS. The biggest problem is that ranged queries don't work properly if the query interval is exactly within a single record. It turns out that I didn't implement the record filtering quite right -- for the first call into the btree code, we want to find any rmap that overlaps with the range specified, but for subsequent calls, we only want rmaps that come after the low key of the query. This can be fixed by tweaking the filtering logic and pushing the key handling into the individual backend implementations. The second problem I noticed is that there are integer overflows in the rtbitmap and external log handlers. This is the result of a poor decision on my part to use the incore rmap records for storing the query ranges; this only works for the rmap code, which is smart enough to iterate AGs. This breaks down spectacularly if someone tries to query high block offsets in either the rt volume or the log device. I fixed that by introducing a second filtering implementation based entirely on daddrs. The third problem was minor by comparison -- the rt volume cannot ever use rtblocks beyond the end of the last rtextent, so it makes no sense for GETFSMAP to try to query those areas. Having done that, add a few more patches to clean up some messes. If you're going to start using this mess, you probably ought to just pull from my git trees, which are linked below. This is an extraordinary way to destroy everything. Enjoy! Comments and questions are, as always, welcome. --D kernel git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=getfsmap-fixes xfsprogs git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=getfsmap-fixes --- fs/xfs/libxfs/xfs_alloc.c | 10 -- fs/xfs/libxfs/xfs_refcount.c | 13 +- fs/xfs/libxfs/xfs_rmap.c | 10 -- fs/xfs/xfs_fsmap.c | 261 ++++++++++++++++++++++-------------------- fs/xfs/xfs_trace.h | 25 ++++ 5 files changed, 177 insertions(+), 142 deletions(-)