Skip to content
  • Darrick J. Wong's avatar
    xfs: skip CoW writes past EOF when writeback races with truncate · 70c57dcd
    Darrick J. Wong authored
    
    
    Every so often we blow the ASSERT(type != XFS_IO_COW) in xfs_map_blocks
    when running fsstress, as we do in generic/269.  The cause of this is
    writeback racing with truncate -- writeback doesn't take the iolock, so
    truncate can sneak in to decrease i_size and truncate page cache while
    writeback is gathering buffer heads to schedule writeout.
    
    If we hit this race on a block that has a CoW mapping, we'll get a valid
    imap from the CoW fork but the reduced i_size trims the mapping to zero
    length (which makes it invalid), so we call xfs_map_blocks to try again.
    This doesn't do much anyway, since any mapping we get out of that will
    also be invalid, so we might as well skip the assert and just stop.
    
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    70c57dcd