• Darrick J. Wong's avatar
    xfs: accumulate iextent records when checking bmap · 634d4a79
    Darrick J. Wong authored
    Currently, the bmap scrubber checks file fork mappings individually.  In
    the case that the file uses multiple mappings to a single contiguous
    piece of space, the scrubber repeatedly locks the AG to check the
    existence of a reverse mapping that overlaps this file mapping.  If the
    reverse mapping starts before or ends after the mapping we're checking,
    it will also crawl around in the bmbt checking correspondence for
    adjacent extents.
    
    This is not very time efficient because it does the crawling while
    holding the AGF buffer, and checks the middle mappings multiple times.
    Instead, create a custom iextent record iterator function that combines
    multiple adjacent allocated mappings into one large incore bmbt record.
    This is feasible because the incore bmbt record length is 64-bits wide.
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    634d4a79
bmap.c 24.4 KB