• Brian Foster's avatar
    xfs: don't reserve blocks for right shift transactions · 8c1e9cfd
    Brian Foster authored
    commit 48af96ab upstream.
    
    The block reservation for the transaction allocated in
    xfs_shift_file_space() is an artifact of the original collapse range
    support. It exists to handle the case where a collapse range occurs,
    the initial extent is left shifted into a location that forms a
    contiguous boundary with the previous extent and thus the extents
    are merged. This code was subsequently refactored and reused for
    insert range (right shift) support.
    
    If an insert range occurs under low free space conditions, the
    extent at the starting offset is split before the first shift
    transaction is allocated. If the block reservation fails, this
    leaves separate, but contiguous extents around in the inode. While
    not a fatal problem, this is unexpected and will flag a warning on
    subsequent insert range operations on the inode. This problem has
    been reproduce intermittently by generic/270 running against a
    ramdisk device.
    
    Since right shift does not create new extent boundaries in the
    inode, a block reservation for extent merge is unnecessary. Update
    xfs_shift_file_space() to conditionally reserve fs blocks for left
    shift transactions only. This avoids the warning reproduced by
    generic/270.
    Reported-by: default avatarRoss Zwisler <ross.zwisler@linux.intel.com>
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8c1e9cfd
xfs_bmap_util.c 55.8 KB