From: David Howells <dhowells@redhat.com>
To: viro@zeniv.linux.org.uk
Cc: dhowells@redhat.com, linux-fsdevel@vger.kernel.org,
linux-afs@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: [PATCH 00/10] iov_iter: Add new iters and use with AFS
Date: Thu, 13 Sep 2018 16:51:35 +0100 [thread overview]
Message-ID: <153685389564.14766.11306559824641824935.stgit@warthog.procyon.org.uk> (raw)
Hi Al,
Here's a set of patches that adds two new iov_iter types and then makes AFS
use them to do I/O. The iov_iter changes are:
(1) Separate the type from the direction in the iov_iter struct and
provide accessor functions to wrap type checking.
(2) Renumber the type constants to be contiguous small unsigned integers,
starting from 0 and then use switch-statements rather than if-else
chains using bit-testing.
Note that the compiler can optimise this better by using CMP rather
than AND/TEST, say, as comparing integers requires fewer CMP
instructions or can use jump tables.
(3) Change iov_offset from size_t to loff_t. This allows iov_offset to be
then used as a byte offset with ITER_MAPPING and allows 4GiB and larger
reads and writes to be proposed.
This makes no difference on a 64-bit system, but does make a 32-bit
compilation a bit larger.
(4) Add an ITER_MAPPING iterator type. This provides an iterator that
directly accesses an address_space, and assumes that the target pages
are in some way locked (eg. PG_lock or PG_writeback).
(5) Add an ITER_DISCARD iterator type. This provides an iterator that
simply discards anything written to it. It cannot be used as a data
source.
The afs changes are:
(1) Use a single ITER_MAPPING iterator to cover all the data read by a
single FetchData RPC op. This involves switching the operation to an
ITER_KVEC iterator to read the status record that's transmitted after
the data.
(2) Use an ITER_DISCARD iterator to discard any extra data the server may
have included that we don't want.
(3) Use a single ITER_MAPPING iterator to cover all the data written by a
single StoreData RPC op.
(4) Add synchronous O_DIRECT read support.
This should also be useful for doing direct I/O from cachefiles.
The patches can be found here also:
http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=afs-iov
David
---
David Howells (10):
iov_iter: Separate type from direction and use accessor functions
iov_iter: Renumber the ITER_* constants in uio.h
iov_iter: Make count and iov_offset loff_t not size_t
iov_iter: Add mapping and discard iterator types
afs: Better tracing of protocol errors
afs: Set up the iov_iter before calling afs_extract_data()
afs: Use ITER_MAPPING for writing
afs: Add O_DIRECT read support
afs: Add a couple of tracepoints to log I/O errors
afs: Don't invoke the server to read data beyond EOF
block/bio.c | 2
drivers/block/drbd/drbd_main.c | 2
drivers/block/drbd/drbd_receiver.c | 2
drivers/block/loop.c | 9
drivers/block/nbd.c | 12 -
drivers/isdn/mISDN/l1oip_core.c | 3
drivers/misc/vmw_vmci/vmci_queue_pair.c | 6
drivers/nvme/target/io-cmd-file.c | 2
drivers/target/iscsi/iscsi_target_util.c | 6
drivers/target/target_core_file.c | 6
drivers/usb/usbip/usbip_common.c | 2
drivers/xen/pvcalls-back.c | 8
fs/9p/vfs_addr.c | 4
fs/9p/vfs_dir.c | 2
fs/9p/xattr.c | 4
fs/afs/cmservice.c | 56 +--
fs/afs/dir.c | 208 ++++++++---
fs/afs/file.c | 262 ++++++++++----
fs/afs/fsclient.c | 409 ++++++++-------------
fs/afs/inode.c | 2
fs/afs/internal.h | 81 +++-
fs/afs/mntpt.c | 6
fs/afs/rxrpc.c | 156 ++------
fs/afs/server.c | 4
fs/afs/vlclient.c | 134 +++----
fs/afs/volume.c | 2
fs/afs/write.c | 112 ++++--
fs/block_dev.c | 2
fs/btrfs/file.c | 7
fs/ceph/file.c | 7
fs/cifs/connect.c | 4
fs/cifs/file.c | 4
fs/cifs/misc.c | 4
fs/cifs/smb2ops.c | 4
fs/cifs/smbdirect.c | 17 +
fs/cifs/transport.c | 8
fs/direct-io.c | 2
fs/dlm/lowcomms.c | 2
fs/fuse/file.c | 2
fs/iomap.c | 2
fs/nfs/direct.c | 2
fs/nfsd/vfs.c | 4
fs/ocfs2/cluster/tcp.c | 2
fs/orangefs/inode.c | 2
fs/splice.c | 7
include/linux/fscache.h | 31 ++
include/linux/uio.h | 69 ++--
include/trace/events/afs.h | 202 ++++++++---
lib/iov_iter.c | 572 ++++++++++++++++++++++++------
mm/filemap.c | 2
mm/page_io.c | 2
net/9p/client.c | 4
net/9p/trans_virtio.c | 2
net/bluetooth/6lowpan.c | 2
net/bluetooth/a2mp.c | 2
net/bluetooth/smp.c | 2
net/ceph/messenger.c | 6
net/netfilter/ipvs/ip_vs_sync.c | 2
net/smc/smc_clc.c | 4
net/socket.c | 6
net/sunrpc/svcsock.c | 2
net/tipc/topsrv.c | 2
net/tls/tls_device.c | 4
net/tls/tls_sw.c | 4
64 files changed, 1551 insertions(+), 953 deletions(-)
next reply other threads:[~2018-09-13 17:35 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-13 15:51 David Howells [this message]
2018-09-13 15:51 ` [PATCH 01/10] iov_iter: Separate type from direction and use accessor functions David Howells
2018-09-13 15:51 ` [PATCH 02/10] iov_iter: Renumber the ITER_* constants in uio.h David Howells
2018-09-13 15:52 ` [PATCH 03/10] iov_iter: Make count and iov_offset loff_t not size_t David Howells
2018-09-13 15:52 ` [PATCH 04/10] iov_iter: Add mapping and discard iterator types David Howells
2018-09-14 4:18 ` Al Viro
2018-09-14 12:57 ` Trond Myklebust
2018-09-17 21:32 ` David Howells
2018-09-17 20:58 ` David Howells
2018-09-13 15:52 ` [PATCH 05/10] afs: Better tracing of protocol errors David Howells
2018-09-13 15:52 ` [PATCH 06/10] afs: Set up the iov_iter before calling afs_extract_data() David Howells
2018-09-13 15:52 ` [PATCH 07/10] afs: Use ITER_MAPPING for writing David Howells
2018-09-13 15:52 ` [PATCH 08/10] afs: Add O_DIRECT read support David Howells
2018-09-13 15:52 ` [PATCH 09/10] afs: Add a couple of tracepoints to log I/O errors David Howells
2018-09-13 15:52 ` [PATCH 10/10] afs: Don't invoke the server to read data beyond EOF David Howells
2018-09-13 16:10 ` [PATCH 00/10] iov_iter: Add new iters and use with AFS Matthew Wilcox
2018-09-13 16:18 ` David Howells
2018-09-13 16:43 ` Matthew Wilcox
2018-09-13 17:05 ` David Howells
2018-09-13 17:58 ` Al Viro
-- strict thread matches above, loose matches on Subject: below --
2018-08-06 13:16 David Howells
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=153685389564.14766.11306559824641824935.stgit@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=linux-afs@lists.infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.