aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/ipvs/ip_vs_sync.c9
-rw-r--r--net/smc/smc_clc.c18
-rw-r--r--net/sunrpc/svcsock.c4
-rw-r--r--net/tipc/server.c4
4 files changed, 17 insertions, 18 deletions
diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
index 9ee71cb276d7..fbaf3bd05b2e 100644
--- a/net/netfilter/ipvs/ip_vs_sync.c
+++ b/net/netfilter/ipvs/ip_vs_sync.c
@@ -1636,17 +1636,14 @@ static int
1636ip_vs_receive(struct socket *sock, char *buffer, const size_t buflen) 1636ip_vs_receive(struct socket *sock, char *buffer, const size_t buflen)
1637{ 1637{
1638 struct msghdr msg = {NULL,}; 1638 struct msghdr msg = {NULL,};
1639 struct kvec iov; 1639 struct kvec iov = {buffer, buflen};
1640 int len; 1640 int len;
1641 1641
1642 EnterFunction(7); 1642 EnterFunction(7);
1643 1643
1644 /* Receive a packet */ 1644 /* Receive a packet */
1645 iov.iov_base = buffer; 1645 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, buflen);
1646 iov.iov_len = (size_t)buflen; 1646 len = sock_recvmsg(sock, &msg, MSG_DONTWAIT);
1647
1648 len = kernel_recvmsg(sock, &msg, &iov, 1, buflen, MSG_DONTWAIT);
1649
1650 if (len < 0) 1647 if (len < 0)
1651 return len; 1648 return len;
1652 1649
diff --git a/net/smc/smc_clc.c b/net/smc/smc_clc.c
index 1800e16b2a02..511548085d16 100644
--- a/net/smc/smc_clc.c
+++ b/net/smc/smc_clc.c
@@ -35,7 +35,7 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
35 struct smc_clc_msg_hdr *clcm = buf; 35 struct smc_clc_msg_hdr *clcm = buf;
36 struct msghdr msg = {NULL, 0}; 36 struct msghdr msg = {NULL, 0};
37 int reason_code = 0; 37 int reason_code = 0;
38 struct kvec vec; 38 struct kvec vec = {buf, buflen};
39 int len, datlen; 39 int len, datlen;
40 int krflags; 40 int krflags;
41 41
@@ -43,12 +43,15 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
43 * so we don't consume any subsequent CLC message or payload data 43 * so we don't consume any subsequent CLC message or payload data
44 * in the TCP byte stream 44 * in the TCP byte stream
45 */ 45 */
46 vec.iov_base = buf; 46 /*
47 vec.iov_len = buflen; 47 * Caller must make sure that buflen is no less than
48 * sizeof(struct smc_clc_msg_hdr)
49 */
48 krflags = MSG_PEEK | MSG_WAITALL; 50 krflags = MSG_PEEK | MSG_WAITALL;
49 smc->clcsock->sk->sk_rcvtimeo = CLC_WAIT_TIME; 51 smc->clcsock->sk->sk_rcvtimeo = CLC_WAIT_TIME;
50 len = kernel_recvmsg(smc->clcsock, &msg, &vec, 1, 52 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &vec, 1,
51 sizeof(struct smc_clc_msg_hdr), krflags); 53 sizeof(struct smc_clc_msg_hdr));
54 len = sock_recvmsg(smc->clcsock, &msg, krflags);
52 if (signal_pending(current)) { 55 if (signal_pending(current)) {
53 reason_code = -EINTR; 56 reason_code = -EINTR;
54 clc_sk->sk_err = EINTR; 57 clc_sk->sk_err = EINTR;
@@ -83,12 +86,11 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
83 } 86 }
84 87
85 /* receive the complete CLC message */ 88 /* receive the complete CLC message */
86 vec.iov_base = buf;
87 vec.iov_len = buflen;
88 memset(&msg, 0, sizeof(struct msghdr)); 89 memset(&msg, 0, sizeof(struct msghdr));
90 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &vec, 1, buflen);
89 krflags = MSG_WAITALL; 91 krflags = MSG_WAITALL;
90 smc->clcsock->sk->sk_rcvtimeo = CLC_WAIT_TIME; 92 smc->clcsock->sk->sk_rcvtimeo = CLC_WAIT_TIME;
91 len = kernel_recvmsg(smc->clcsock, &msg, &vec, 1, datlen, krflags); 93 len = sock_recvmsg(smc->clcsock, &msg, krflags);
92 if (len < datlen) { 94 if (len < datlen) {
93 smc->sk.sk_err = EPROTO; 95 smc->sk.sk_err = EPROTO;
94 reason_code = -EPROTO; 96 reason_code = -EPROTO;
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index ff8e06cd067e..5570719e4787 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -338,8 +338,8 @@ static int svc_recvfrom(struct svc_rqst *rqstp, struct kvec *iov, int nr,
338 rqstp->rq_xprt_hlen = 0; 338 rqstp->rq_xprt_hlen = 0;
339 339
340 clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags); 340 clear_bit(XPT_DATA, &svsk->sk_xprt.xpt_flags);
341 len = kernel_recvmsg(svsk->sk_sock, &msg, iov, nr, buflen, 341 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, iov, nr, buflen);
342 msg.msg_flags); 342 len = sock_recvmsg(svsk->sk_sock, &msg, msg.msg_flags);
343 /* If we read a full record, then assume there may be more 343 /* If we read a full record, then assume there may be more
344 * data to read (stream based sockets only!) 344 * data to read (stream based sockets only!)
345 */ 345 */
diff --git a/net/tipc/server.c b/net/tipc/server.c
index d60c30342327..78a292a84afc 100644
--- a/net/tipc/server.c
+++ b/net/tipc/server.c
@@ -264,8 +264,8 @@ static int tipc_receive_from_sock(struct tipc_conn *con)
264 iov.iov_base = buf; 264 iov.iov_base = buf;
265 iov.iov_len = s->max_rcvbuf_size; 265 iov.iov_len = s->max_rcvbuf_size;
266 msg.msg_name = &addr; 266 msg.msg_name = &addr;
267 ret = kernel_recvmsg(con->sock, &msg, &iov, 1, iov.iov_len, 267 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, iov.iov_len);
268 MSG_DONTWAIT); 268 ret = sock_recvmsg(con->sock, &msg, MSG_DONTWAIT);
269 if (ret <= 0) { 269 if (ret <= 0) {
270 kmem_cache_free(s->rcvbuf_cache, buf); 270 kmem_cache_free(s->rcvbuf_cache, buf);
271 goto out_close; 271 goto out_close;