From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from zeniv.linux.org.uk ([195.92.253.2]:48718 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750908AbdE3Hsz (ORCPT ); Tue, 30 May 2017 03:48:55 -0400 Date: Tue, 30 May 2017 08:48:53 +0100 From: Al Viro To: Christoph Hellwig Cc: linux-fsdevel@vger.kernel.org Subject: Re: [PATCH 1/3] splice: default to iter based versions implicitly Message-ID: <20170530074853.GF6365@ZenIV.linux.org.uk> References: <20170528094807.26801-1-hch@lst.de> <20170528094807.26801-2-hch@lst.de> <20170530071115.GE6365@ZenIV.linux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170530071115.GE6365@ZenIV.linux.org.uk> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Tue, May 30, 2017 at 08:11:15AM +0100, Al Viro wrote: > On Sun, May 28, 2017 at 12:48:05PM +0300, Christoph Hellwig wrote: > > If a file_operations instance has the read or write iter methods we should > > use the iter based splice code by default. We still allow to overide it > > with explicit ->read_iter and ->write_iter methods, but few of them are > > left, and there is a non-zero chance that we could get rid of them in the > > future. > > ->read_iter() side: you are changing behaviour for the following bunch: ->write_iter(): a whole lot more changed ones; OTOH, ITER_BDEV is less painful that ITER_PIPE. arch/s390/hypfs/inode.c:438: .write_iter = hypfs_write_iter, drivers/bluetooth/hci_vhci.c:368: .write_iter = vhci_write, drivers/char/mem.c:814: .write_iter = write_iter_zero, drivers/char/raw.c:287: .write_iter = blkdev_write_iter, drivers/infiniband/hw/hfi1/file_ops.c:110: .write_iter = hfi1_write_iter, drivers/infiniband/hw/qib/qib_file_ops.c:72: .write_iter = qib_write_iter, drivers/net/tap.c:1135: .write_iter = tap_write_iter, drivers/net/tun.c:2424: .write_iter = tun_chr_write_iter, drivers/staging/lustre/lustre/llite/file.c:3119: .write_iter = ll_file_write_iter, drivers/staging/lustre/lustre/llite/file.c:3132: .write_iter = ll_file_write_iter, drivers/staging/lustre/lustre/llite/file.c:3148: .write_iter = ll_file_write_iter, drivers/usb/gadget/function/f_fs.c:1253: .write_iter = ffs_epfile_write_iter, drivers/usb/gadget/legacy/inode.c:705: .write_iter = ep_write_iter, drivers/vhost/net.c:1250: .write_iter = vhost_net_chr_write_iter, fs/9p/vfs_file.c:642: .write_iter = generic_file_write_iter, fs/9p/vfs_file.c:653: .write_iter = generic_file_write_iter, fs/9p/vfs_file.c:665: .write_iter = v9fs_file_write_iter, fs/9p/vfs_file.c:676: .write_iter = v9fs_file_write_iter, fs/9p/vfs_file.c:688: .write_iter = v9fs_mmap_file_write_iter, fs/9p/vfs_file.c:699: .write_iter = v9fs_mmap_file_write_iter, fs/adfs/file.c:29: .write_iter = generic_file_write_iter, fs/affs/file.c:972: .write_iter = generic_file_write_iter, fs/afs/file.c:37: .write_iter = afs_file_write, fs/bfs/file.c:27: .write_iter = generic_file_write_iter, fs/btrfs/file.c:3078: .write_iter = btrfs_file_write_iter, fs/cifs/cifsfs.c:1064: .write_iter = cifs_file_write_iter, fs/cifs/cifsfs.c:1082: .write_iter = cifs_strict_writev, fs/cifs/cifsfs.c:1101: .write_iter = cifs_user_writev, fs/cifs/cifsfs.c:1119: .write_iter = cifs_file_write_iter, fs/cifs/cifsfs.c:1136: .write_iter = cifs_strict_writev, fs/cifs/cifsfs.c:1154: .write_iter = cifs_user_writev, fs/coda/file.c:202: .write_iter = coda_file_write_iter, fs/ecryptfs/file.c:414: .write_iter = generic_file_write_iter, fs/fat/file.c:175: .write_iter = generic_file_write_iter, fs/fuse/cuse.c:181: .write_iter = cuse_write_iter, fs/fuse/file.c:3010: .write_iter = fuse_file_write_iter, fs/fuse/file.c:3028: .write_iter = fuse_direct_write_iter, fs/hfs/inode.c:681: .write_iter = generic_file_write_iter, fs/hfsplus/inode.c:347: .write_iter = generic_file_write_iter, fs/hostfs/hostfs_kern.c:392: .write_iter = generic_file_write_iter, fs/hpfs/file.c:211: .write_iter = generic_file_write_iter, fs/jffs2/file.c:55: .write_iter = generic_file_write_iter, fs/minix/file.c:18: .write_iter = generic_file_write_iter, fs/ncpfs/file.c:249: .write_iter = ncp_file_write_iter, fs/nilfs2/file.c:143: .write_iter = generic_file_write_iter, fs/ntfs/file.c:2024: .write_iter = ntfs_file_write_iter, fs/omfs/file.c:341: .write_iter = generic_file_write_iter, fs/orangefs/devorangefs-req.c:834: .write_iter = orangefs_devreq_write_iter, fs/orangefs/file.c:744: .write_iter = orangefs_file_write_iter, fs/sysv/file.c:25: .write_iter = generic_file_write_iter, fs/udf/file.c:244: .write_iter = udf_file_write_iter, fs/ufs/file.c:39: .write_iter = generic_file_write_iter, kernel/printk/printk.c:999: .write_iter = devkmsg_write, sound/core/pcm_native.c:3682: .write_iter = snd_pcm_writev, adfs, affs, afs, bfs, btrfs, coda, fat, ecryptfs, hfs, hfsplus, hostfs, hpfs, jffs2, minix, ncpfs, nilfs2, omfs, orangefs, sysv, udf, ufs: should be OK ntfs: probably OK 9p: depends upon p9_client_write() safety, very likely to be OK. cifs: probably OK fuse/cuse: might be OK, needs testing lustre: probably OK drivers/char/mem: ought to use splice_write_null(), actually. drivers/char/raw: should be OK gadgetfs: needs testing, might be OK bluetooth, orangefs devreq, devkmsg, tun/tap, vhost: will break. These are datagram-oriented and currently pipe buffers serve as datagram boundaries. With this change the would get concatenated, with bogus results. hypfs, infinibarf, sound: fuck, no