diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2019-02-19 12:39:40 -0500 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2019-02-20 17:35:58 -0500 |
commit | e791f8e9380d945ee9ed75aba2d65a9369f01820 (patch) | |
tree | 6391aaf1f0a173bf816b79c31cb4d02d5589dcc3 /net/sunrpc/xprtsock.c | |
parent | 5f52a9d429b8ba8f9d669730adf16bc534eb74ea (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.c | 38 |
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 | ||
745 | static int xs_send_kvec(struct socket *sock, struct sockaddr *addr, int addrlen, struct kvec *vec, unsigned int base, int more) | 745 | static 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) | 752 | static 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 | ||
762 | static int xs_send_pagedata(struct socket *sock, struct xdr_buf *xdr, unsigned int base, int more, bool zerocopy, int *sent_p) | 762 | static 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 | */ |
811 | static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen, struct xdr_buf *xdr, unsigned int base, bool zerocopy, int *sent_p) | 811 | static 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); | ||
850 | out: | 858 | out: |
851 | if (err > 0) { | 859 | if (err > 0) { |
852 | *sent_p += err; | 860 | *sent_p += err; |