• Andreas Gruenbacher's avatar
    fs: Fix page_mkwrite off-by-one errors · 243145bc
    Andreas Gruenbacher authored
    The check in block_page_mkwrite that is meant to determine whether an
    offset is within the inode size is off by one.  This bug has been copied
    into iomap_page_mkwrite and several filesystems (ubifs, ext4, f2fs,
    ceph).
    
    Fix that by introducing a new page_mkwrite_check_truncate helper that
    checks for truncate and computes the bytes in the page up to EOF.  Use
    the helper in iomap.
    
    NOTE from Darrick: The original patch fixed a number of filesystems, but
    then there were merge conflicts with the f2fs for-next tree; a
    subsequent re-submission of the patch had different btrfs changes with
    no explanation; and Christoph complained that each per-fs fix should be
    a separate patch.  In my view that's too much risk to take on, so I
    decided to drop all the hunks except for iomap, since I've actually QA'd
    XFS.
    Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    [darrick: drop everything but the iomap parts]
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    243145bc
buffered-io.c 43.3 KB