• Dave Chinner's avatar
    xfs: fix allocation length overflow in xfs_bmapi_write() · a99ebf43
    Dave Chinner authored
    When testing the new xfstests --large-fs option that does very large
    file preallocations, this assert was tripped deep in
    xfs_alloc_vextent():
    
    XFS: Assertion failed: args->minlen <= args->maxlen, file: fs/xfs/xfs_alloc.c, line: 2239
    
    The allocation was trying to allocate a zero length extent because
    the lower 32 bits of the allocation length was zero. The remaining
    length of the allocation to be done was an exact multiple of 2^32 -
    the first case I saw was at 496TB remaining to be allocated.
    
    This turns out to be an overflow when converting the allocation
    length (a 64 bit quantity) into the extent length to allocate (a 32
    bit quantity), and it requires the length to be allocated an exact
    multiple of 2^32 blocks to trip the assert.
    
    Fix it by limiting the extent lenth to allocate to MAXEXTLEN.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Signed-off-by: default avatarBen Myers <bpm@sgi.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    a99ebf43
xfs_bmap.c 179 KB