• Christoph Hellwig's avatar
    xfs: fix SEEK_DATA for speculative COW fork preallocation · 60271ab7
    Christoph Hellwig authored
    We speculatively allocate extents in the COW fork to reduce
    fragmentation.  But when we write data into such COW fork blocks that
    do now shadow an allocation in the data fork SEEK_DATA will not
    correctly report it, as it only looks at the data fork extents.
    The only reason why that hasn't been an issue so far is because
    we even use these speculative COW fork preallocations over holes in
    the data fork at all for buffered writes, and blocks in the COW
    fork that are written by direct writes are moved into the data
    fork immediately at I/O completion time.
    
    Add a new set of iomap_ops for SEEK_HOLE/SEEK_DATA which looks into
    both the COW and data fork, and reports all COW extents as unwritten
    to the iomap layer.  While this isn't strictly true for COW fork
    extents that were already converted to real extents, the practical
    semantics that you can't read data from them until they are moved
    into the data fork are very similar, and this will force the iomap
    layer into probing the extents for actually present data.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    60271ab7