Re: [PATCH RFC net-next 6/6] rds: zerocopy Tx support.
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2018-01-18 00:33:13
On Wed, Jan 17, 2018 at 7:20 AM, Sowmini Varadhan [off-list ref] wrote:
If the MSG_ZEROCOPY flag is specified with rds_sendmsg(), and,
if the SO_ZEROCOPY socket option has been set on the PF_RDS socket,
application pages sent down with rds_sendmsg() are pinned.
The pinning uses the accounting infrastructure added by
Commit a91dbff551a6 ("sock: ulimit on MSG_ZEROCOPY pages")
The payload bytes in the message may not be modified for the
duration that the message has been pinned. A multi-threaded
application using this infrastructure may thus need to be notified
about send-completion so that it can free/reuse the buffers
passed to rds_sendmsg(). Notification of send-completion will
identify each message-buffer by a cookie that the application
must specify as ancillary data to rds_sendmsg().
The ancillary data in this case has cmsg_level == SOL_RDS
and cmsg_type == RDS_CMSG_ZCOPY_COOKIE.
Signed-off-by: Sowmini Varadhan <redacted>
---
include/uapi/linux/rds.h | 1 +
net/rds/message.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
net/rds/rds.h | 3 ++-
net/rds/send.c | 27 ++++++++++++++++++++++++---
4 files changed, 70 insertions(+), 5 deletions(-)+static int rds_cmsg_zcopy(struct rds_sock *rs, struct rds_message *rm,
+ struct cmsghdr *cmsg)
+{
+ unsigned int *cookie;Use fixed-width types across the ABI.
+ + if (cmsg->cmsg_len < CMSG_LEN(sizeof(*cookie))) + return -EINVAL; + cookie = CMSG_DATA(cmsg); + rm->data.op_mmp_znotifier->z_cookie = *cookie; + return 0; +} +
quoted hunk ↗ jump to hunk
@@ -1107,12 +1126,14 @@ int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len) /* Attach data to the rm */ if (payload_len) { - rm->data.op_sg = rds_message_alloc_sgs(rm, ceil(payload_len, PAGE_SIZE)); + int num_sgs = ceil(payload_len, PAGE_SIZE); + + rm->data.op_sg = rds_message_alloc_sgs(rm, num_sgs);
Unrelated change. Leftover from revising the patch? Also, with user pages, data is no longer guaranteed to be page aligned, so this may need more sgs.