• Darrick J. Wong's avatar
    xfs: make sure maxlen is still congruent with prod when rounding down · f6a2dae2
    Darrick J. Wong authored
    In commit 2a6ca4ba, we tried to fix an overflow problem in the
    realtime allocator that was caused by an overly large maxlen value
    causing xfs_rtcheck_range to run off the end of the realtime bitmap.
    Unfortunately, there is a subtle bug here -- maxlen (and minlen) both
    have to be aligned with @prod, but @prod can be larger than 1 if the
    user has set an extent size hint on the file, and that extent size hint
    is larger than the realtime extent size.
    
    If the rt free space extents are not aligned to this file's extszhint
    because other files without extent size hints allocated space (or the
    number of rt extents is similarly not aligned), then it's possible that
    maxlen after clamping to sb_rextents will no longer be aligned to prod.
    The allocation will succeed just fine, but we still trip the assertion.
    
    Fix the problem by reducing maxlen by any misalignment with prod.  While
    we're at it, split the assertions into two so that we can tell which
    value had the bad alignment.
    
    Fixes: 2a6ca4ba ("xfs: make sure the rt allocator doesn't run off the end")
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    f6a2dae2
xfs_rtalloc.c 39.4 KB