On Thu, Apr 20, 2023 at 11:36:57PM +0100, Al Viro wrote: > Don't get me wrong - I'd love to kill ITER_PIPE off; it's just that tons > of ->splice_read() duplicating the corresponding ->read_iter() up to the > point where it would call generic_file_read_iter(), modulo ignoring > O_DIRECT case and then calling filemap_splice_read() instead... Painful > and asking for trouble down the road. FWIW, broken in this series: * a bunch of 9p variants (those could probably switch to direct) * afs * ceph (very likely) * ecryptfs (atime propagation) * dax on various filesystems (probably) * f2fs * gfs2 * nfs * ocfs2 * orangefs * xfs * zonefs (probably) * splice from UDP sockets, unless I'm misreading something. Your sock_splice_read() still falls back to generic_file_splice_read(), rather than to direct_splice_read() and sockets don't have O_DIRECT in flags. Neither do they have associated page cache ;-) Sure, we could provide a bunch of ->splice_read(), but then we'd have to make sure that all subsequent changes to matching ->read_iter() get duplicated - unless they are on O_DIRECT-only paths, that is...