mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 06:31:52 +00:00
xfs: convert COW blocks to real blocks before unwritten extent conversion
We need to splice COW blocks we've completed in xfs_end_io_direct_write into the data fork before converting unwritten extents. Otherwise xfs_bmapi_write might first allocate blocks for any holes in the data fork, which isn't only not needed but also harmful as it might cause reserved block underruns in the transaction. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
6f97077ff6
commit
feac470e36
@ -1547,13 +1547,13 @@ xfs_end_io_direct_write(
|
|||||||
i_size_write(inode, offset + size);
|
i_size_write(inode, offset + size);
|
||||||
spin_unlock(&ip->i_flags_lock);
|
spin_unlock(&ip->i_flags_lock);
|
||||||
|
|
||||||
|
if (flags & XFS_DIO_FLAG_COW)
|
||||||
|
error = xfs_reflink_end_cow(ip, offset, size);
|
||||||
if (flags & XFS_DIO_FLAG_UNWRITTEN) {
|
if (flags & XFS_DIO_FLAG_UNWRITTEN) {
|
||||||
trace_xfs_end_io_direct_write_unwritten(ip, offset, size);
|
trace_xfs_end_io_direct_write_unwritten(ip, offset, size);
|
||||||
|
|
||||||
error = xfs_iomap_write_unwritten(ip, offset, size);
|
error = xfs_iomap_write_unwritten(ip, offset, size);
|
||||||
}
|
}
|
||||||
if (flags & XFS_DIO_FLAG_COW)
|
|
||||||
error = xfs_reflink_end_cow(ip, offset, size);
|
|
||||||
if (flags & XFS_DIO_FLAG_APPEND) {
|
if (flags & XFS_DIO_FLAG_APPEND) {
|
||||||
trace_xfs_end_io_direct_write_append(ip, offset, size);
|
trace_xfs_end_io_direct_write_append(ip, offset, size);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user