diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/ipvs/ip_vs_sync.c | 9 | ||||
-rw-r--r-- | net/smc/smc_clc.c | 18 | ||||
-rw-r--r-- | net/sunrpc/svcsock.c | 4 | ||||
-rw-r--r-- | net/tipc/server.c | 4 |
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 | |||
1636 | ip_vs_receive(struct socket *sock, char *buffer, const size_t buflen) | 1636 | ip_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; |