fix stale delalloc punching for COW I/O

Christoph Hellwig
2024-08-27T05:10:31Z

Hi all,

this is another fallout from the zoned XFS work, which stresses the XFS
COW I/O path very heavily. It affects normal I/O to reflinked files as
well, but is very hard to hit there.

The main problem here is that we only punch out delalloc reservations
from the data fork, but COW I/O places delalloc extents into the COW
fork, which means that it won't get punched out for short writes.

Diffstat:
fs/iomap/buffered-io.c | 139 +++++++++++++++++++++++--------------------------
fs/xfs/xfs_aops.c | 4 -
fs/xfs/xfs_bmap_util.c | 10 ++-
fs/xfs/xfs_bmap_util.h | 2
fs/xfs/xfs_iomap.c | 57 ++++++++------------
include/linux/iomap.h | 11 ++-
6 files changed, 109 insertions(+), 114 deletions(-)