linux/fs/xfs
Jens Axboe 34ecde3c56
iomap: don't lose folio dropbehind state for overwrites
DONTCACHE I/O must have the completion punted to a workqueue, just like
what is done for unwritten extents, as the completion needs task context
to perform the invalidation of the folio(s). However, if writeback is
started off filemap_fdatawrite_range() off generic_sync() and it's an
overwrite, then the DONTCACHE marking gets lost as iomap_add_to_ioend()
don't look at the folio being added and no further state is passed down
to help it know that this is a dropbehind/DONTCACHE write.

Check if the folio being added is marked as dropbehind, and set
IOMAP_IOEND_DONTCACHE if that is the case. Then XFS can factor this into
the decision making of completion context in xfs_submit_ioend().
Additionally include this ioend flag in the NOMERGE flags, to avoid
mixing it with unrelated IO.

Since this is the 3rd flag that will cause XFS to punt the completion to
a workqueue, add a helper so that each one of them can get appropriately
commented.

This fixes extra page cache being instantiated when the write performed
is an overwrite, rather than newly instantiated blocks.

Fixes: b2cd5ae693 ("iomap: make buffered writes work with RWF_DONTCACHE")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/5153f6e8-274d-4546-bf55-30a5018e0d03@kernel.dk
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
2025-05-28 09:26:07 +02:00
..
libxfs xfs: allow sysadmins to specify a maximum atomic write limit at mount time 2025-05-07 14:25:33 -07:00
scrub xfs: New code for 6.16 2025-05-26 12:56:01 -07:00
Kconfig lib/crc: remove CONFIG_LIBCRC32C 2025-04-04 11:31:42 -07:00
Makefile xfs: export zone stats in /proc/*/mountstats 2025-03-03 08:17:10 -07:00
xfs_acl.c xfs: make attr removal an explicit operation 2024-04-23 07:46:51 -07:00
xfs_acl.h
xfs_aops.c iomap: don't lose folio dropbehind state for overwrites 2025-05-28 09:26:07 +02:00
xfs_aops.h xfs: implement direct writes to zoned RT devices 2025-03-03 08:17:07 -07:00
xfs_attr_inactive.c xfs: remove bp->b_error check in xfs_attr3_root_inactive 2025-01-13 14:56:15 +01:00
xfs_attr_item.c xfs: fix xfs_init_attr_trans not handling explicit operation codes 2024-05-27 15:55:52 +05:30
xfs_attr_item.h xfs: create attr log item opcodes and formats for parent pointers 2024-04-23 07:46:57 -07:00
xfs_attr_list.c xfs: eliminate lockdep false positives in xfs_attr_shortform_list 2024-11-22 09:52:03 +01:00
xfs_bio_io.c xfs: simplify xfs_rw_bdev 2025-05-07 07:31:07 -06:00
xfs_bmap_item.c xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_bmap_item.h xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_bmap_util.c xfs: implement buffered writes to zoned RT devices 2025-03-03 08:17:07 -07:00
xfs_bmap_util.h xfs: implement buffered writes to zoned RT devices 2025-03-03 08:17:07 -07:00
xfs_buf_item_recover.c xfs: kill XBF_UNMAPPED 2025-03-10 14:29:44 +01:00
xfs_buf_item.c xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_buf_item.h xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_buf_mem.c xfs: compute buffer address correctly in xmbuf_map_backing_mem 2025-04-14 11:22:52 +02:00
xfs_buf_mem.h xfs: cleanup mapping tmpfs folios into the buffer cache 2025-03-10 14:29:44 +01:00
xfs_buf.c xfs: New code for 6.16 2025-05-26 12:56:01 -07:00
xfs_buf.h xfs: ignore HW which cannot atomic write a single block 2025-05-07 14:25:31 -07:00
xfs_dahash_test.c
xfs_dahash_test.h
xfs_dir2_readdir.c xfs: refactor dir format helpers 2024-04-26 11:21:46 +05:30
xfs_discard.c xfs: don't assume perags are initialised when trimming AGs 2025-05-05 09:39:19 +02:00
xfs_discard.h
xfs_dquot_item_recover.c
xfs_dquot_item.c xfs: attach dquot buffer to dquot log item buffer 2024-12-12 17:45:11 -08:00
xfs_dquot_item.h xfs: attach dquot buffer to dquot log item buffer 2024-12-12 17:45:11 -08:00
xfs_dquot.c xfs: remove the leftover xfs_{set,clear}_li_failed infrastructure 2025-04-14 10:24:30 +02:00
xfs_dquot.h xfs: prepare to reuse the dquot pointer space in struct xfs_inode 2024-12-23 13:06:03 -08:00
xfs_drain.c xfs: allow queued realtime intents to drain before scrubbing 2024-12-23 13:06:06 -08:00
xfs_drain.h xfs: allow queued realtime intents to drain before scrubbing 2024-12-23 13:06:06 -08:00
xfs_error.c xfs: allow inode-based btrees to reserve space in the data device 2024-12-23 13:06:03 -08:00
xfs_error.h
xfs_exchmaps_item.c xfs: capture inode generation numbers in the ondisk exchmaps log item 2024-04-15 14:54:24 -07:00
xfs_exchmaps_item.h xfs: create deferred log items for file mapping exchanges 2024-04-15 14:54:17 -07:00
xfs_exchrange.c xfs: don't call remap_verify_area with sb write protection held 2025-01-24 12:08:50 +01:00
xfs_exchrange.h xfs: introduce new file range commit ioctls 2024-09-01 08:58:19 -07:00
xfs_export.c xfs: add parent pointer ioctls 2024-04-23 07:47:00 -07:00
xfs_export.h xfs: add parent pointer ioctls 2024-04-23 07:47:00 -07:00
xfs_extent_busy.c xfs: implement zoned garbage collection 2025-03-03 08:17:07 -07:00
xfs_extent_busy.h xfs: convert busy extent tracking to the generic group structure 2024-11-05 13:38:29 -08:00
xfs_extfree_item.c xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_extfree_item.h xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_file.c xfs: update atomic write limits 2025-05-07 14:25:32 -07:00
xfs_file.h xfs: create a new helper to return a file's allocation unit 2024-04-15 14:54:10 -07:00
xfs_filestream.c xfs: free the item in xfs_mru_cache_insert on failure 2025-05-14 19:00:12 +02:00
xfs_filestream.h
xfs_fsmap.c xfs: fix fsmap for internal zoned devices 2025-04-16 12:56:10 +02:00
xfs_fsmap.h xfs: clean up xfs_getfsmap_helper arguments 2024-11-05 13:38:35 -08:00
xfs_fsops.c xfs: remove the flags argument to xfs_buf_read_uncached 2025-03-18 14:47:45 +01:00
xfs_fsops.h xfs: support reserved blocks for the rt extent counter 2025-03-03 08:16:43 -07:00
xfs_globals.c xfs: Remove deprecated xfs_bufd sysctl parameters 2025-05-14 12:35:24 +02:00
xfs_handle.c simplify xfs_find_handle() a bit 2024-11-03 01:28:06 -05:00
xfs_handle.h xfs: add parent pointer ioctls 2024-04-23 07:47:00 -07:00
xfs_health.c xfs: report realtime refcount btree corruption errors to the health system 2024-12-23 13:06:14 -08:00
xfs_hooks.c
xfs_hooks.h
xfs_icache.c - The 7 patch series "powerpc/crash: use generic crashkernel 2025-04-01 10:06:52 -07:00
xfs_icache.h
xfs_icreate_item.c
xfs_icreate_item.h
xfs_inode_item_recover.c xfs: define the zoned on-disk format 2025-03-03 08:16:45 -07:00
xfs_inode_item.c xfs: remove the leftover xfs_{set,clear}_li_failed infrastructure 2025-04-14 10:24:30 +02:00
xfs_inode_item.h
xfs_inode.c - The 6 patch series "Enable strict percpu address space checks" from 2025-04-01 09:29:18 -07:00
xfs_inode.h xfs: ignore HW which cannot atomic write a single block 2025-05-07 14:25:31 -07:00
xfs_ioctl.c xfs: support reserved blocks for the rt extent counter 2025-03-03 08:16:43 -07:00
xfs_ioctl.h xfs: move handle ioctl code to xfs_handle.c 2024-04-23 07:47:00 -07:00
xfs_ioctl32.c xfs: move handle ioctl code to xfs_handle.c 2024-04-23 07:47:00 -07:00
xfs_ioctl32.h
xfs_iomap.c xfs: add large atomic writes checks in xfs_direct_write_iomap_begin() 2025-05-07 14:25:32 -07:00
xfs_iomap.h xfs: add xfs_atomic_write_cow_iomap_begin() 2025-05-07 14:25:31 -07:00
xfs_iops.c xfs: update atomic write limits 2025-05-07 14:25:32 -07:00
xfs_iops.h xfs: refine atomic write size check in xfs_file_write_iter() 2025-05-07 14:25:31 -07:00
xfs_itable.c xfs: allow bulkstat to return metadata directories 2024-11-05 13:38:32 -08:00
xfs_itable.h xfs: allow bulkstat to return metadata directories 2024-11-05 13:38:32 -08:00
xfs_iunlink_item.c xfs: pass the iunlink item to the xfs_iunlink_update_dinode trace point 2024-11-05 13:38:26 -08:00
xfs_iunlink_item.h
xfs_iwalk.c xfs: switch perag iteration from the for_each macros to a while based iterator 2024-11-05 13:38:28 -08:00
xfs_iwalk.h xfs: factor out a xfs_iwalk_args helper 2024-11-05 13:38:27 -08:00
xfs_linux.h move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
xfs_log_cil.c xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_log_priv.h xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_log_recover.c xfs: decouple buffer readahead from the normal buffer read path 2025-02-25 13:05:59 +01:00
xfs_log.c xfs: simplify building the bio in xlog_write_iclog 2025-05-07 07:31:07 -06:00
xfs_log.h xfs: Remove empty declartion in header file 2024-10-07 08:00:11 +02:00
xfs_message.c xfs: remove the EXPERIMENTAL warning for pNFS 2025-05-14 12:42:12 +02:00
xfs_message.h xfs: remove the EXPERIMENTAL warning for pNFS 2025-05-14 12:42:12 +02:00
xfs_mount.c xfs: allow sysadmins to specify a maximum atomic write limit at mount time 2025-05-07 14:25:33 -07:00
xfs_mount.h xfs: add inode to zone caching for data placement 2025-05-14 19:00:17 +02:00
xfs_mru_cache.c xfs: free the item in xfs_mru_cache_insert on failure 2025-05-14 19:00:12 +02:00
xfs_mru_cache.h
xfs_notify_failure.c super: add filesystem freezing helpers for suspend and hibernate 2025-05-09 12:41:02 +02:00
xfs_notify_failure.h xfs: react to fsdax failure notifications on the rt device 2024-12-23 13:06:09 -08:00
xfs_pnfs.c xfs: remove the EXPERIMENTAL warning for pNFS 2025-05-14 12:42:12 +02:00
xfs_pnfs.h
xfs_pwork.c
xfs_pwork.h
xfs_qm_bhv.c xfs: Do not allow norecovery mount with quotacheck 2025-02-14 09:40:35 +01:00
xfs_qm_syscalls.c xfs: delalloc and quota softlimit timers are incoherent 2024-11-22 11:24:45 +01:00
xfs_qm.c xfs: disable rt quotas for zoned file systems 2025-03-03 08:17:09 -07:00
xfs_qm.h xfs: keep quota directory inode loaded 2024-12-12 17:45:08 -08:00
xfs_quota.h xfs: prepare to reuse the dquot pointer space in struct xfs_inode 2024-12-23 13:06:03 -08:00
xfs_quotaops.c xfs: refactor loading quota inodes in the regular case 2024-09-01 08:58:20 -07:00
xfs_refcount_item.c xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_refcount_item.h xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_reflink.c xfs: add xfs_calc_atomic_write_unit_max() 2025-05-07 14:25:32 -07:00
xfs_reflink.h xfs: add xfs_calc_atomic_write_unit_max() 2025-05-07 14:25:32 -07:00
xfs_rmap_item.c xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_rmap_item.h xfs: add helpers to compute log item overhead 2025-05-07 14:25:30 -07:00
xfs_rtalloc.c xfs: remove the flags argument to xfs_buf_get_uncached 2025-03-18 14:47:45 +01:00
xfs_rtalloc.h xfs: make metabtree reservations global 2025-03-03 08:16:43 -07:00
xfs_stats.c xfs: introduce realtime refcount btree ondisk definitions 2024-12-23 13:06:10 -08:00
xfs_stats.h xfs: introduce realtime refcount btree ondisk definitions 2024-12-23 13:06:10 -08:00
xfs_super.c xfs: New code for 6.16 2025-05-26 12:56:01 -07:00
xfs_super.h xfs: react to fsdax failure notifications on the rt device 2024-12-23 13:06:09 -08:00
xfs_symlink.c xfs: pass the icreate args object to xfs_dialloc 2024-09-01 08:58:19 -07:00
xfs_symlink.h xfs: move remote symlink target read function to libxfs 2024-02-22 12:45:17 -08:00
xfs_sysctl.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
xfs_sysctl.h xfs: Remove deprecated xfs_bufd sysctl parameters 2025-05-14 12:35:24 +02:00
xfs_sysfs.c xfs: add tunable threshold parameter for triggering zone GC 2025-04-14 10:41:33 +02:00
xfs_sysfs.h xfs: contain more sysfs code in xfs_sysfs.c 2025-03-03 08:17:10 -07:00
xfs_trace.c xfs: add the zoned space allocator 2025-03-03 08:16:56 -07:00
xfs_trace.h xfs: allow sysadmins to specify a maximum atomic write limit at mount time 2025-05-07 14:25:33 -07:00
xfs_trans_ail.c xfs: Fix comment on xfs_trans_ail_update_bulk() 2025-05-14 15:37:50 +02:00
xfs_trans_buf.c xfs: add a b_iodone callback to struct xfs_buf 2025-01-14 11:38:15 +01:00
xfs_trans_dquot.c xfs: prepare to reuse the dquot pointer space in struct xfs_inode 2024-12-23 13:06:03 -08:00
xfs_trans_priv.h xfs: remove the leftover xfs_{set,clear}_li_failed infrastructure 2025-04-14 10:24:30 +02:00
xfs_trans.c xfs: remove the t_magic field in struct xfs_trans 2025-01-13 14:55:19 +01:00
xfs_trans.h xfs: remove the t_magic field in struct xfs_trans 2025-01-13 14:55:19 +01:00
xfs_xattr.c xfs: standardize EXPERIMENTAL warning generation 2024-11-05 13:38:30 -08:00
xfs_xattr.h xfs: remove xfs_da_args.attr_flags 2024-04-23 07:46:50 -07:00
xfs_zone_alloc.c xfs: add inode to zone caching for data placement 2025-05-14 19:00:17 +02:00
xfs_zone_alloc.h xfs: export zone stats in /proc/*/mountstats 2025-03-03 08:17:10 -07:00
xfs_zone_gc.c xfs: fix zoned GC data corruption due to wrong bv_offset 2025-05-14 15:37:49 +02:00
xfs_zone_info.c xfs: export zone stats in /proc/*/mountstats 2025-03-03 08:17:10 -07:00
xfs_zone_priv.h xfs: support write life time based data placement 2025-03-03 08:17:10 -07:00
xfs_zone_space_resv.c xfs: trigger zone GC when out of available rt blocks 2025-03-11 12:52:27 +01:00
xfs.h xfs: verify buffer, inode, and dquot items every tx commit 2024-07-02 11:36:54 -07:00