From: David Howells <dhowells@redhat.com>
To: viro@zeniv.linux.org.uk
Cc: dhowells@redhat.com, linux-afs@lists.infradead.org,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
matthew@wil.cx
Subject: [PATCH 00/10] iov_iter: Add new iters and use with AFS
Date: Mon, 06 Aug 2018 14:16:38 +0100 [thread overview]
Message-ID: <153356139813.1195.8360582774280288285.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 count and 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. Possibly only iov_offset really needs to be
made loff_t and size >= 4GiB should just be disallowed on 32-bit.
(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.
The patches can be found here also:
http://git.kernel.org/cgit/linux/kernel/git/dhowells/linux-fs.git/log/?h=afs-next
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/vfs_file.c | 2
fs/9p/xattr.c | 4
fs/afs/cmservice.c | 56 +--
fs/afs/dir.c | 210 ++++++++---
fs/afs/file.c | 263 ++++++++++----
fs/afs/fsclient.c | 409 ++++++++-------------
fs/afs/inode.c | 2
fs/afs/internal.h | 81 +++-
fs/afs/mntpt.c | 2
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/nfs/file.c | 4
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 | 71 ++--
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/rxrpc/recvmsg.c | 4
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
67 files changed, 1555 insertions(+), 960 deletions(-)
next reply other threads:[~2018-08-06 13:16 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-06 13:16 David Howells [this message]
2018-08-06 13:16 ` [PATCH 01/10] iov_iter: Separate type from direction and use accessor functions David Howells
2018-08-06 13:16 ` [PATCH 02/10] iov_iter: Renumber the ITER_* constants in uio.h David Howells
2018-08-06 13:16 ` [PATCH 03/10] iov_iter: Make count and iov_offset loff_t not size_t David Howells
2018-08-06 13:17 ` [PATCH 04/10] iov_iter: Add mapping and discard iterator types David Howells
2018-08-06 13:17 ` [PATCH 05/10] afs: Better tracing of protocol errors David Howells
2018-08-06 13:17 ` [PATCH 06/10] afs: Set up the iov_iter before calling afs_extract_data() David Howells
2018-08-06 13:17 ` [PATCH 07/10] afs: Use ITER_MAPPING for writing David Howells
2018-08-06 13:17 ` [PATCH 08/10] afs: Add O_DIRECT read support David Howells
2018-08-06 13:17 ` [PATCH 09/10] afs: Add a couple of tracepoints to log I/O errors David Howells
2018-08-06 13:17 ` [PATCH 10/10] afs: Don't invoke the server to read data beyond EOF David Howells
2018-09-13 15:51 [PATCH 00/10] iov_iter: Add new iters and use with AFS David Howells
2018-09-13 16:10 ` 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
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=153356139813.1195.8360582774280288285.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=matthew@wil.cx \
--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 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).