• C
    xfs: rewrite getbmap using the xfs_iext_* helpers · abbf9e8a
    Christoph Hellwig 提交于
    Currently getbmap uses xfs_bmapi_read to query the extent map, and then
    fixes up various bits that are eventually reported to userspace.
    
    This patch instead rewrites it to use xfs_iext_lookup_extent and
    xfs_iext_get_extent to iteratively process the extent map.  This not
    only avoids the need to allocate a map for the returned xfs_bmbt_irec
    structures but also greatly simplified the code.
    
    There are two intentional behavior changes compared to the old code:
    
     - the current code reports unwritten extents that don't directly border
       a written one as unwritten even when not passing the BMV_IF_PREALLOC
       option, contrary to the documentation.  The new code requires the
       BMV_IF_PREALLOC flag to report the unwrittent extent bit.
     - The new code does never merges consecutive extents, unlike the old
       code that sometimes does it based on the boundaries of the
       xfs_bmapi_read calls.  Note that the extent merging behavior was
       entirely undocumented.
    Signed-off-by: NChristoph Hellwig <hch@lst.de>
    Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
    abbf9e8a
xfs_bmap_util.c 54.1 KB