From: Al Viro <viro@ZenIV.linux.org.uk>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org
Subject: Re: [RFC][PATCHSET] more iov_iter conversion in net/*
Date: Sat, 31 Jan 2015 04:03:47 +0000 [thread overview]
Message-ID: <20150131040347.GL29656@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20150131035513.GK29656@ZenIV.linux.org.uk>
On Sat, Jan 31, 2015 at 03:55:13AM +0000, Al Viro wrote:
> ->sendmsg() side of that business, now. By the end of it, we
> get all ->sendmsg() instances leaving iovec unchanged and ->msg_iter -
> drained.
>
> 1/18: netlink: make the check for "send from tx_ring" deterministic
> As discussed last year.
> 2/18: raw_send_hdrinc(): pass msghdr
> Switch from passing msg->iov_iter.iov to passing msg itself
> 3/18: rawv6_send_hdrinc(): pass msghdr
> Ditto
> 4/18: propagate msghdr all way down to __qp_memcpy_to_queue()
> Ditto
> 5/18: switch rxrpc_send_data() to iov_iter primitives
> Convert skb_add_data() to iov_iter; allows to get rid of the explicit
> messing with iovec in its only caller - skb_add_data() will keep advancing
> ->msg_iter for us, so there's no need to similate that manually.
> 6/18: make the users of rxrpc_kernel_send_data() set kvec-backed msg_iter
> properly
> Use iov_iter_kvec() there, get rid of set_fs() games - now that
> rxrpc_send_data() uses iov_iter primitives, it'll handle ITER_KVEC just
> fine.
> 7/18: stash a pointer to msghdr in struct ping_fakehdr
> ... instead of storing its ->mgs_iter.iov there
> 8/18: convert tcp_sendmsg() to iov_iter primitives
> There's one potentially subtle change here: in case of short
> copy from userland, mainline tcp_send_syn_data() discards the skb it
> has allocated and falls back to normal path, where we'll send as much
> as possible after rereading the same data again. This patch trims
> SYN+data skb instead - that way we don't need to copy from the same
> place twice. I _think_ it's correct, but I'd really appreciate a review
> of that one.
> 9/18: switch memcpy_fromiovec()/memcpy_fromiovecend() users to
> copy_from_iter()
> That takes care of the majority of ->sendmsg() instances.
> 10/18: tipc ->sendmsg() conversion
> This one needs to copy the same data from user potentially more than
> once. Sadly, MTU changes can trigger that ;-/
> 11/18: bury net/core/iovec.c - nothing in there is used anymore
> 12/18: switch af_alg_make_sg() to iov_iter
> With that, all ->sendmsg() instances are converted to iov_iter
> primitives and are agnostic wrt the kind of iov_iter they are working with.
> So's the last remaining ->recvmsg() instance that wasn't kind-agnostic yet.
> All ->sendmsg() and ->recvmsg() advance ->msg_iter by the amount actually
> copied and none of them modifies the underlying iovec, etc.
> 13/18: net/socket.c: fold do_sock_{read,write} into callers
> 14/18: switch sockets to ->read_iter/->write_iter
> 15/18: switch vhost get_indirect() to iov_iter, kill memcpy_fromiovec()
> 16/18: vhost: don't bother with copying iovec in handle_tx()
> 17/18: vhost: don't bother copying iovecs in handle_rx(), kill
> memcpy_toiovecend()
> 18/18: vhost: vhost_scsi_handle_vq() should just use copy_from_user()
> ... and with that lib/iovec.c is gone - nothing in there has callers
> left.
>
> The pile after that one will be dealing with the kernel_sendmsg and
> kernel_recvmg callers - at that point we can start reaping benefits of
> consistent way ->msg_iter is handled. Note that after these changes if
> iov_iter_kvec() is used to initialize ->msg_iter, we don't need the games
> with get_fs()/set_fs() anymore; just sock_sendmsg()/sock_recvmsg() will do,
> so quite a few of those kernel_{send,recv}msg() callers will turn into
> sock_{send,recv}msg() ones.
FWIW, for those who prefer to review stuff in git, this pile is in
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-davem, and
diffstat is
crypto/af_alg.c | 40 ++----
crypto/algif_hash.c | 45 +++---
crypto/algif_skcipher.c | 74 +++++-----
drivers/misc/vmw_vmci/vmci_queue_pair.c | 16 +--
drivers/vhost/net.c | 88 ++++--------
drivers/vhost/scsi.c | 2 +-
drivers/vhost/vhost.c | 6 +-
fs/afs/rxrpc.c | 14 +-
include/crypto/if_alg.h | 3 +-
include/linux/skbuff.h | 14 +-
include/linux/socket.h | 7 -
include/linux/uio.h | 6 -
include/linux/vmw_vmci_api.h | 2 +-
include/net/ping.h | 2 +-
include/net/sock.h | 18 ++-
include/net/udplite.h | 3 +-
lib/Makefile | 2 +-
lib/iovec.c | 87 ------------
net/core/Makefile | 2 +-
net/core/iovec.c | 137 -------------------
net/ipv4/ip_output.c | 6 +-
net/ipv4/ping.c | 17 ++-
net/ipv4/raw.c | 7 +-
net/ipv4/tcp.c | 233 +++++++++++++++-----------------
net/ipv4/tcp_output.c | 11 +-
net/ipv6/ping.c | 3 +-
net/ipv6/raw.c | 7 +-
net/netlink/af_netlink.c | 4 +
net/rxrpc/ar-output.c | 46 ++-----
net/socket.c | 76 ++++-------
net/tipc/msg.c | 7 +-
net/tipc/socket.c | 14 +-
net/vmw_vsock/vmci_transport.c | 3 +-
33 files changed, 316 insertions(+), 686 deletions(-)
Please, review.
next prev parent reply other threads:[~2015-01-31 4:03 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-31 3:55 [RFC][PATCHSET] more iov_iter conversion in net/* Al Viro
2015-01-31 3:56 ` [PATCH 01/18] netlink: make the check for "send from tx_ring" deterministic Al Viro
2015-01-31 3:56 ` [PATCH 02/18] raw_send_hdrinc(): pass msghdr Al Viro
2015-01-31 3:56 ` [PATCH 03/18] rawv6_send_hdrinc(): " Al Viro
2015-01-31 3:56 ` [PATCH 04/18] propagate msghdr all way down to __qp_memcpy_to_queue() Al Viro
2015-01-31 3:56 ` [PATCH 05/18] switch rxrpc_send_data() to iov_iter primitives Al Viro
2015-01-31 3:56 ` [PATCH 06/18] make the users of rxrpc_kernel_send_data() set kvec-backed msg_iter properly Al Viro
2015-01-31 3:56 ` [PATCH 07/18] stash a pointer to msghdr in struct ping_fakehdr Al Viro
2015-01-31 3:56 ` [PATCH 08/18] convert tcp_sendmsg() to iov_iter primitives Al Viro
2015-01-31 3:56 ` [PATCH 09/18] switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter() Al Viro
2015-01-31 3:56 ` [PATCH 10/18] tipc ->sendmsg() conversion Al Viro
2015-01-31 3:56 ` [PATCH 11/18] bury net/core/iovec.c - nothing in there is used anymore Al Viro
2015-01-31 3:56 ` [PATCH 12/18] switch af_alg_make_sg() to iov_iter Al Viro
2015-01-31 3:56 ` [PATCH 13/18] net/socket.c: fold do_sock_{read,write} into callers Al Viro
2015-01-31 3:56 ` [PATCH 14/18] switch sockets to ->read_iter/->write_iter Al Viro
2015-01-31 3:56 ` [PATCH 15/18] switch vhost get_indirect() to iov_iter, kill memcpy_fromiovec() Al Viro
2015-01-31 3:56 ` [PATCH 16/18] vhost: don't bother with copying iovec in handle_tx() Al Viro
2015-01-31 3:56 ` [PATCH 17/18] vhost: don't bother copying iovecs in handle_rx(), kill memcpy_toiovecend() Al Viro
2015-01-31 3:56 ` [PATCH 18/18] vhost: vhost_scsi_handle_vq() should just use copy_from_user() Al Viro
2015-01-31 4:03 ` Al Viro [this message]
2015-02-02 6:26 ` [RFC][PATCHSET] more iov_iter conversion in net/* David Miller
2015-02-02 6:53 ` Al Viro
2015-02-02 7:05 ` David Miller
2015-02-02 8:01 ` Al Viro
2015-02-02 7:59 ` [PATCH v2 01/18] netlink: make the check for "send from tx_ring" deterministic Al Viro
2015-02-02 13:14 ` Sergei Shtylyov
2015-02-04 0:21 ` David Miller
2015-02-04 6:37 ` Al Viro
2015-02-04 6:39 ` [PATCH v3 " Al Viro
2015-02-04 6:39 ` [PATCH v3 02/18] ipv4: raw_send_hdrinc(): pass msghdr Al Viro
2015-02-04 6:39 ` [PATCH v3 03/18] ipv6: rawv6_send_hdrinc(): " Al Viro
2015-02-04 6:39 ` [PATCH v3 04/18] vmci: propagate msghdr all way down to __qp_memcpy_to_queue() Al Viro
2015-02-04 6:39 ` [PATCH v3 05/18] rxrpc: switch rxrpc_send_data() to iov_iter primitives Al Viro
2015-02-04 6:39 ` [PATCH v3 06/18] rxrpc: make the users of rxrpc_kernel_send_data() set kvec-backed msg_iter properly Al Viro
2015-02-04 6:39 ` [PATCH v3 07/18] ip: stash a pointer to msghdr in struct ping_fakehdr Al Viro
2015-02-04 6:39 ` [PATCH v3 08/18] ip: convert tcp_sendmsg() to iov_iter primitives Al Viro
2015-02-04 6:40 ` [PATCH v3 09/18] net: switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter() Al Viro
2015-02-04 6:40 ` [PATCH v3 10/18] tipc: tipc ->sendmsg() conversion Al Viro
2015-02-04 6:40 ` [PATCH v3 11/18] net: bury net/core/iovec.c - nothing in there is used anymore Al Viro
2015-02-04 6:40 ` [PATCH v3 12/18] crypto: switch af_alg_make_sg() to iov_iter Al Viro
2015-02-09 13:33 ` Stephan Mueller
2015-02-09 17:28 ` Al Viro
2015-02-09 13:59 ` Stephan Mueller
2015-02-09 17:30 ` Al Viro
2015-02-04 6:40 ` [PATCH v3 13/18] net/socket.c: fold do_sock_{read,write} into callers Al Viro
2015-02-04 6:40 ` [PATCH v3 14/18] net: switch sockets to ->read_iter/->write_iter Al Viro
2015-02-04 6:40 ` [PATCH v3 15/18] vhost: switch vhost get_indirect() to iov_iter, kill memcpy_fromiovec() Al Viro
2015-02-04 8:52 ` Michael S. Tsirkin
2015-02-04 6:40 ` [PATCH v3 16/18] vhost: don't bother with copying iovec in handle_tx() Al Viro
2015-02-04 9:13 ` Michael S. Tsirkin
2015-02-04 6:40 ` [PATCH v3 17/18] vhost: don't bother copying iovecs in handle_rx(), kill memcpy_toiovecend() Al Viro
2015-02-04 8:52 ` Michael S. Tsirkin
2015-02-04 9:02 ` Michael S. Tsirkin
2015-02-04 6:40 ` [PATCH v3 18/18] vhost: vhost_scsi_handle_vq() should just use copy_from_user() Al Viro
2015-02-04 9:05 ` Michael S. Tsirkin
2015-02-02 7:59 ` [PATCH v2 02/18] ipv4: raw_send_hdrinc(): pass msghdr Al Viro
2015-02-02 7:59 ` [PATCH v2 03/18] ipv6: rawv6_send_hdrinc(): " Al Viro
2015-02-02 7:59 ` [PATCH v2 04/18] vmci: propagate msghdr all way down to __qp_memcpy_to_queue() Al Viro
2015-02-02 7:59 ` [PATCH v2 05/18] rxrpc: switch rxrpc_send_data() to iov_iter primitives Al Viro
2015-02-02 7:59 ` [PATCH v2 06/18] rxrpc: make the users of rxrpc_kernel_send_data() set kvec-backed msg_iter properly Al Viro
2015-02-02 7:59 ` [PATCH v2 07/18] ip: stash a pointer to msghdr in struct ping_fakehdr Al Viro
2015-02-02 7:59 ` [PATCH v2 08/18] ip: convert tcp_sendmsg() to iov_iter primitives Al Viro
2015-02-02 7:59 ` [PATCH v2 09/18] net: switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter() Al Viro
2015-02-02 7:59 ` [PATCH v2 10/18] tipc: tipc ->sendmsg() conversion Al Viro
2015-02-02 7:59 ` [PATCH v2 11/18] net: bury net/core/iovec.c - nothing in there is used anymore Al Viro
2015-02-02 7:59 ` [PATCH v2 12/18] crypto: switch af_alg_make_sg() to iov_iter Al Viro
2015-02-02 7:59 ` [PATCH v2 13/18] net/socket.c: fold do_sock_{read,write} into callers Al Viro
2015-02-02 7:59 ` [PATCH v2 14/18] net: switch sockets to ->read_iter/->write_iter Al Viro
2015-02-02 7:59 ` [PATCH v2 15/18] vhost: switch vhost get_indirect() to iov_iter, kill memcpy_fromiovec() Al Viro
2015-02-03 9:01 ` Michael S. Tsirkin
2015-02-02 7:59 ` [PATCH v2 16/18] vhost: don't bother with copying iovec in handle_tx() Al Viro
2015-02-03 9:14 ` Michael S. Tsirkin
2015-02-02 7:59 ` [PATCH v2 17/18] vhost: don't bother copying iovecs in handle_rx(), kill memcpy_toiovecend() Al Viro
2015-02-03 9:13 ` Michael S. Tsirkin
2015-02-03 10:04 ` Michael S. Tsirkin
2015-02-03 15:21 ` Michael S. Tsirkin
2015-02-03 22:13 ` Al Viro
2015-02-02 7:59 ` [PATCH v2 18/18] vhost: vhost_scsi_handle_vq() should just use copy_from_user() Al Viro
2015-02-03 0:42 ` Nicholas A. Bellinger
2015-02-03 9:05 ` Michael S. Tsirkin
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=20150131040347.GL29656@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
/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).