• Dave Chinner's avatar
    xfs: fix data corruption w/ unaligned dedupe ranges · dceeb47b
    Dave Chinner authored
    A deduplication data corruption is Exposed by fstests generic/505 on
    XFS. It is caused by extending the block match range to include the
    partial EOF block, but then allowing unknown data beyond EOF to be
    considered a "match" to data in the destination file because the
    comparison is only made to the end of the source file. This corrupts
    the destination file when the source extent is shared with it.
    
    XFS only supports whole block dedupe, but we still need to appear to
    support whole file dedupe correctly.  Hence if the dedupe request
    includes the last block of the souce file, don't include it in the
    actual XFS dedupe operation. If the rest of the range dedupes
    successfully, then report the partial last block as deduped, too, so
    that userspace sees it as a successful dedupe rather than return
    EINVAL because we can't dedupe unaligned blocks.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    dceeb47b
xfs_reflink.c 45.8 KB