• Lachlan McIlroy's avatar
    [XFS] Fix speculative allocation beyond eof · 9f6c92b9
    Lachlan McIlroy authored
    Speculative allocation beyond eof doesn't work properly.  It was
    broken some time ago after a code cleanup that moved what is now
    xfs_iomap_eof_align_last_fsb() and xfs_iomap_eof_want_preallocate()
    out of xfs_iomap_write_delay() into separate functions.  The code
    used to use the current file size in various checks but got changed
    to be max(file_size, i_new_size).  Since i_new_size is the result
    of 'offset + count' then in xfs_iomap_eof_want_preallocate() the
    check for '(offset + count) <= isize' will always be true.
    
    ie if 'offset + count' is > ip->i_size then isize will be i_new_size
    and equal to 'offset + count'.
    
    This change fixes all the places that used to use the current file
    size.
    Reviewed-by: default avatarChristoph Hellwig <hch@infradead.org>
    Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
    9f6c92b9
xfs_iomap.c 24.5 KB