• Darrick J. Wong's avatar
    xfs: check free AG space when making per-AG reservations · 0f934251
    Darrick J. Wong authored
    The new online shrink code exposed a gap in the per-AG reservation
    code, which is that we only return ENOSPC to callers if the entire fs
    doesn't have enough free blocks.  Except for debugging mode, the
    reservation init code doesn't ever check that there's enough free space
    in that AG to cover the reservation.
    
    Not having enough space is not considered an immediate fatal error that
    requires filesystem offlining because (a) it's shouldn't be possible to
    wind up in that state through normal file operations and (b) even if
    one did, freeing data blocks would recover the situation.
    
    However, online shrink now needs to know if shrinking would not leave
    enough space so that it can abort the shrink operation.  Hence we need
    to promote this assertion into an actual error return.
    
    Observed by running xfs/168 with a 1k block size, though in theory this
    could happen with any configuration.
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Reviewed-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarCarlos Maiolino <cmaiolino@redhat.com>
    Reviewed-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
    0f934251
xfs_ag_resv.c 11.9 KB