• Omar Sandoval's avatar
    xfs: don't try redundant allocations in xfs_rtallocate_extent_near() · 85fa2c77
    Omar Sandoval authored
    xfs_rtallocate_extent_near() tries to find a free extent as close to a
    target bitmap block given by bbno as possible, which may be before or
    after bbno. Searching backwards has a complication: the realtime summary
    accounts for free space _starting_ in a bitmap block, but not straddling
    or ending in a bitmap block. So, when the negative search finds a free
    extent in the realtime summary, in order to end up closer to the target,
    it looks for the end of the free extent. For example, if bbno - 2 has a
    free extent, then it will check bbno - 1, then bbno - 2. But then if
    bbno - 3 has a free extent, it will check bbno - 1 again, then bbno - 2
    again, and then bbno - 3. This results in a quadratic loop, which is
    completely pointless since the repeated checks won't find anything new.
    
    Fix it by remembering where we last checked up to and continue from
    there. This also obviates the need for a check of the realtime summary.
    Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    85fa2c77
xfs_rtalloc.c 36.8 KB