linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 0/5] Remove rw parameter from direct_IO()
@ 2015-03-16 11:33 Omar Sandoval
  2015-03-16 11:33 ` [RFC PATCH 1/5] new helper: iov_iter_rw() Omar Sandoval
                   ` (6 more replies)
  0 siblings, 7 replies; 15+ messages in thread
From: Omar Sandoval @ 2015-03-16 11:33 UTC (permalink / raw)
  To: Alexander Viro, linux-fsdevel, linux-btrfs, ceph-devel,
	linux-cifs, osd-dev, linux-ext4, linux-f2fs-devel, fuse-devel,
	cluster-devel, jfs-discussion, HPDD-discuss, linux-nfs,
	linux-nilfs, ocfs2-devel, reiserfs-devel, v9fs-developer, xfs
  Cc: linux-kernel, Chris Mason, Josef Bacik, David Sterba, Yan Zheng,
	Sage Weil, Steve French, Boaz Harrosh, Benny Halevy, Jan Kara,
	Theodore Ts'o, Andreas Dilger, Jaegeuk Kim, Changman Lee,
	Miklos Szeredi, Steven Whitehouse, Dave Kleikamp, Oleg Drokin,
	Trond Myklebust, Anna Schumaker, Ryusuke Konishi, Mark Fasheh,
	Joel Becker, Eric Van Hensbergen, Ron Minnich, Latchesar Ionkov,
	Dave Chinner, Omar Sandoval

Hi,

Al, here's some cleanup that you mentioned back in December that I got
around to (https://lkml.org/lkml/2014/12/15/28).

In summary, the rw parameter to a_ops->direct_IO() is redundant with
.type in struct iov_iter. Additionally, rw is inconsistently checked for
being a WRITE; some filesystems do rw == WRITE, others do rw & WRITE,
and others do both within the same function :) The distinction is that
swapout may OR in the ITER_BVEC flag in the rw passed to ->direct_IO(),
so the two are not equivalent (although this really only happens for
swap-over-NFS, but it's scary nonetheless). After looking through all of
these, it definitely looks like every check means for ANY write, not
just non-kernel writes.

So, the solution presented here is:

- Add a helper, iov_iter_rw(), which always returns either READ or
  WRITE, no ITER_.* or REQ_.* nonsense mixed in. For consistency, the
  return value is always checked for equality
- Get rid of all uses of rw in any implementations of direct_IO,
  starting with the generic code
- Nuke the actual parameter and update the documentation

I decided to squish all of the filesystems together in patch 4 to avoid
inundating the mailing lists with 20+ mostly two-line patches, but I can
split those out if that's any better. Additionally, patch 1 pulls fs.h
into uio.h, which seems undesirable.

These were mostly just compile tested, with a couple of direct I/O
xfstests run on btrfs as quick sanity check, so getting some more eyes
on is probably a good thing. They should apply on top of v4.0-rc4.
Please comment away.

Thank you,

Omar Sandoval (5):
  new helper: iov_iter_rw()
  Remove rw from {,__,do_}blockdev_direct_IO()
  Remove rw from dax_{do_,}io()
  direct_IO: use iov_iter_rw() instead of rw everywhere
  direct_IO: remove rw from a_ops->direct_IO()

 Documentation/filesystems/Locking          |  2 +-
 Documentation/filesystems/vfs.txt          |  2 +-
 drivers/staging/lustre/lustre/llite/rw26.c | 22 ++++++++---------
 fs/9p/vfs_addr.c                           |  2 +-
 fs/affs/file.c                             |  9 +++----
 fs/block_dev.c                             |  8 +++---
 fs/btrfs/inode.c                           | 24 +++++++++---------
 fs/ceph/addr.c                             |  3 +--
 fs/cifs/file.c                             |  3 +--
 fs/dax.c                                   | 27 ++++++++++-----------
 fs/direct-io.c                             | 39 ++++++++++++++----------------
 fs/exofs/inode.c                           |  4 +--
 fs/ext2/inode.c                            | 11 ++++-----
 fs/ext3/inode.c                            | 14 +++++------
 fs/ext4/ext4.h                             |  4 +--
 fs/ext4/indirect.c                         | 25 ++++++++++---------
 fs/ext4/inode.c                            | 28 ++++++++++-----------
 fs/f2fs/data.c                             | 22 ++++++++---------
 fs/fat/inode.c                             |  9 +++----
 fs/fuse/file.c                             | 16 ++++++------
 fs/gfs2/aops.c                             | 16 ++++++------
 fs/hfs/inode.c                             |  8 +++---
 fs/hfsplus/inode.c                         |  9 +++----
 fs/jfs/inode.c                             |  8 +++---
 fs/nfs/direct.c                            |  4 +--
 fs/nilfs2/inode.c                          | 10 +++-----
 fs/ocfs2/aops.c                            | 22 +++++++----------
 fs/reiserfs/inode.c                        |  8 +++---
 fs/udf/file.c                              |  3 +--
 fs/udf/inode.c                             |  7 +++---
 fs/xfs/xfs_aops.c                          | 12 ++++-----
 include/linux/fs.h                         | 24 +++++++++---------
 include/linux/nfs_fs.h                     |  2 +-
 include/linux/uio.h                        | 10 ++++++++
 mm/filemap.c                               |  4 +--
 mm/page_io.c                               |  4 +--
 36 files changed, 206 insertions(+), 219 deletions(-)

-- 
2.3.3


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2015-04-05 16:29 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-16 11:33 [RFC PATCH 0/5] Remove rw parameter from direct_IO() Omar Sandoval
2015-03-16 11:33 ` [RFC PATCH 1/5] new helper: iov_iter_rw() Omar Sandoval
2015-03-16 17:36   ` Al Viro
2015-03-17  1:20     ` [RFC PATCH v2 " Omar Sandoval
2015-03-17  9:31     ` [RFC PATCH " David Sterba
2015-03-17 10:18       ` Omar Sandoval
2015-03-17 18:19       ` Al Viro
2015-03-17 21:04         ` [RFC PATCH v3 " Omar Sandoval
2015-03-18 13:42           ` David Sterba
2015-03-16 11:33 ` [RFC PATCH 2/5] Remove rw from {,__,do_}blockdev_direct_IO() Omar Sandoval
2015-03-16 11:33 ` [RFC PATCH 3/5] Remove rw from dax_{do_,}io() Omar Sandoval
2015-03-16 11:33 ` [RFC PATCH 4/5] direct_IO: use iov_iter_rw() instead of rw everywhere Omar Sandoval
2015-03-16 11:33 ` [RFC PATCH 5/5] direct_IO: remove rw from a_ops->direct_IO() Omar Sandoval
2015-03-16 18:15 ` [RFC PATCH 0/5] Remove rw parameter from direct_IO() Al Viro
2015-04-05 16:27 ` Al Viro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).