aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtsock.c
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2019-02-19 12:39:40 -0500
committerTrond Myklebust <trond.myklebust@hammerspace.com>2019-02-20 17:35:58 -0500
commite791f8e9380d945ee9ed75aba2d65a9369f01820 (patch)
tree6391aaf1f0a173bf816b79c31cb4d02d5589dcc3 /net/sunrpc/xprtsock.c
parent5f52a9d429b8ba8f9d669730adf16bc534eb74ea (diff)
SUNRPC: Convert xs_send_kvec() to use iov_iter_kvec()
Prepare to the socket transmission code to use iov_iter. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'net/sunrpc/xprtsock.c')
-rw-r--r--net/sunrpc/xprtsock.c38
1 files changed, 23 insertions, 15 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index a3aadc04808f..e1546dd6aacc 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -742,21 +742,21 @@ xs_stream_start_connect(struct sock_xprt *transport)
742 742
743#define XS_SENDMSG_FLAGS (MSG_DONTWAIT | MSG_NOSIGNAL) 743#define XS_SENDMSG_FLAGS (MSG_DONTWAIT | MSG_NOSIGNAL)
744 744
745static int xs_send_kvec(struct socket *sock, struct sockaddr *addr, int addrlen, struct kvec *vec, unsigned int base, int more) 745static int xs_sendmsg(struct socket *sock, struct msghdr *msg, size_t seek)
746{ 746{
747 struct msghdr msg = { 747 if (seek)
748 .msg_name = addr, 748 iov_iter_advance(&msg->msg_iter, seek);
749 .msg_namelen = addrlen, 749 return sock_sendmsg(sock, msg);
750 .msg_flags = XS_SENDMSG_FLAGS | (more ? MSG_MORE : 0), 750}
751 };
752 struct kvec iov = {
753 .iov_base = vec->iov_base + base,
754 .iov_len = vec->iov_len - base,
755 };
756 751
757 if (iov.iov_len != 0) 752static int xs_send_kvec(struct socket *sock, struct msghdr *msg, struct kvec *vec, size_t seek)
758 return kernel_sendmsg(sock, &msg, &iov, 1, iov.iov_len); 753{
759 return kernel_sendmsg(sock, &msg, NULL, 0, 0); 754 if (!vec) {
755 iov_iter_kvec(&msg->msg_iter, WRITE, NULL, 0, 0);
756 return sock_sendmsg(sock, msg);
757 }
758 iov_iter_kvec(&msg->msg_iter, WRITE, vec, 1, vec->iov_len);
759 return xs_sendmsg(sock, msg, seek);
760} 760}
761 761
762static int xs_send_pagedata(struct socket *sock, struct xdr_buf *xdr, unsigned int base, int more, bool zerocopy, int *sent_p) 762static int xs_send_pagedata(struct socket *sock, struct xdr_buf *xdr, unsigned int base, int more, bool zerocopy, int *sent_p)
@@ -810,6 +810,11 @@ static int xs_send_pagedata(struct socket *sock, struct xdr_buf *xdr, unsigned i
810 */ 810 */
811static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen, struct xdr_buf *xdr, unsigned int base, bool zerocopy, int *sent_p) 811static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen, struct xdr_buf *xdr, unsigned int base, bool zerocopy, int *sent_p)
812{ 812{
813 struct msghdr msg = {
814 .msg_name = addr,
815 .msg_namelen = addrlen,
816 .msg_flags = XS_SENDMSG_FLAGS | MSG_MORE,
817 };
813 unsigned int remainder = xdr->len - base; 818 unsigned int remainder = xdr->len - base;
814 int err = 0; 819 int err = 0;
815 int sent = 0; 820 int sent = 0;
@@ -825,7 +830,9 @@ static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen,
825 if (base < xdr->head[0].iov_len || addr != NULL) { 830 if (base < xdr->head[0].iov_len || addr != NULL) {
826 unsigned int len = xdr->head[0].iov_len - base; 831 unsigned int len = xdr->head[0].iov_len - base;
827 remainder -= len; 832 remainder -= len;
828 err = xs_send_kvec(sock, addr, addrlen, &xdr->head[0], base, remainder != 0); 833 if (remainder == 0)
834 msg.msg_flags &= ~MSG_MORE;
835 err = xs_send_kvec(sock, &msg, &xdr->head[0], base);
829 if (remainder == 0 || err != len) 836 if (remainder == 0 || err != len)
830 goto out; 837 goto out;
831 *sent_p += err; 838 *sent_p += err;
@@ -846,7 +853,8 @@ static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen,
846 853
847 if (base >= xdr->tail[0].iov_len) 854 if (base >= xdr->tail[0].iov_len)
848 return 0; 855 return 0;
849 err = xs_send_kvec(sock, NULL, 0, &xdr->tail[0], base, 0); 856 msg.msg_flags &= ~MSG_MORE;
857 err = xs_send_kvec(sock, &msg, &xdr->tail[0], base);
850out: 858out:
851 if (err > 0) { 859 if (err > 0) {
852 *sent_p += err; 860 *sent_p += err;