rds: zerocopy Tx support.
authorSowmini Varadhan <sowmini.varadhan@oracle.com>
Thu, 15 Feb 2018 18:49:36 +0000 (10:49 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 16 Feb 2018 21:04:17 +0000 (16:04 -0500)
commit0cebaccef3acbdfbc2d85880a2efb765d2f4e2e3
treea8e355ad69ddb3de228816062631f9e4d356b8cc
parent01883eda72bd3f0a6c81447e4f223de14033fd9d
rds: zerocopy Tx support.

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 <sowmini.varadhan@oracle.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/rds.h
net/rds/message.c
net/rds/rds.h
net/rds/send.c