aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/drbd/drbd_main.c8
-rw-r--r--drivers/block/drbd/drbd_receiver.c3
-rw-r--r--drivers/isdn/mISDN/l1oip_core.c22
-rw-r--r--drivers/staging/lustre/lnet/lnet/lib-socket.c24
-rw-r--r--fs/dlm/lowcomms.c4
-rw-r--r--fs/ncpfs/sock.c3
-rw-r--r--fs/ocfs2/cluster/tcp.c3
-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
11 files changed, 46 insertions, 56 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 4b4697a1f963..0a0394aa1b9c 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -1847,7 +1847,7 @@ int drbd_send(struct drbd_connection *connection, struct socket *sock,
1847 void *buf, size_t size, unsigned msg_flags) 1847 void *buf, size_t size, unsigned msg_flags)
1848{ 1848{
1849 struct kvec iov = {.iov_base = buf, .iov_len = size}; 1849 struct kvec iov = {.iov_base = buf, .iov_len = size};
1850 struct msghdr msg; 1850 struct msghdr msg = {.msg_flags = msg_flags | MSG_NOSIGNAL};
1851 int rv, sent = 0; 1851 int rv, sent = 0;
1852 1852
1853 if (!sock) 1853 if (!sock)
@@ -1855,12 +1855,6 @@ int drbd_send(struct drbd_connection *connection, struct socket *sock,
1855 1855
1856 /* THINK if (signal_pending) return ... ? */ 1856 /* THINK if (signal_pending) return ... ? */
1857 1857
1858 msg.msg_name = NULL;
1859 msg.msg_namelen = 0;
1860 msg.msg_control = NULL;
1861 msg.msg_controllen = 0;
1862 msg.msg_flags = msg_flags | MSG_NOSIGNAL;
1863
1864 iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iov, 1, size); 1858 iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iov, 1, size);
1865 1859
1866 if (sock == connection->data.socket) { 1860 if (sock == connection->data.socket) {
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index cb2fa63f6bc0..c72dee0ef083 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -516,7 +516,8 @@ static int drbd_recv_short(struct socket *sock, void *buf, size_t size, int flag
516 struct msghdr msg = { 516 struct msghdr msg = {
517 .msg_flags = (flags ? flags : MSG_WAITALL | MSG_NOSIGNAL) 517 .msg_flags = (flags ? flags : MSG_WAITALL | MSG_NOSIGNAL)
518 }; 518 };
519 return kernel_recvmsg(sock, &msg, &iov, 1, size, msg.msg_flags); 519 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, size);
520 return sock_recvmsg(sock, &msg, msg.msg_flags);
520} 521}
521 522
522static int drbd_recv(struct drbd_connection *connection, void *buf, size_t size) 523static int drbd_recv(struct drbd_connection *connection, void *buf, size_t size)
diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_core.c
index e3654782a3e2..21d50e4cc5e1 100644
--- a/drivers/isdn/mISDN/l1oip_core.c
+++ b/drivers/isdn/mISDN/l1oip_core.c
@@ -645,8 +645,10 @@ l1oip_socket_thread(void *data)
645{ 645{
646 struct l1oip *hc = (struct l1oip *)data; 646 struct l1oip *hc = (struct l1oip *)data;
647 int ret = 0; 647 int ret = 0;
648 struct msghdr msg;
649 struct sockaddr_in sin_rx; 648 struct sockaddr_in sin_rx;
649 struct kvec iov;
650 struct msghdr msg = {.msg_name = &sin_rx,
651 .msg_namelen = sizeof(sin_rx)};
650 unsigned char *recvbuf; 652 unsigned char *recvbuf;
651 size_t recvbuf_size = 1500; 653 size_t recvbuf_size = 1500;
652 int recvlen; 654 int recvlen;
@@ -661,6 +663,9 @@ l1oip_socket_thread(void *data)
661 goto fail; 663 goto fail;
662 } 664 }
663 665
666 iov.iov_base = recvbuf;
667 iov.iov_len = recvbuf_size;
668
664 /* make daemon */ 669 /* make daemon */
665 allow_signal(SIGTERM); 670 allow_signal(SIGTERM);
666 671
@@ -697,12 +702,6 @@ l1oip_socket_thread(void *data)
697 goto fail; 702 goto fail;
698 } 703 }
699 704
700 /* build receive message */
701 msg.msg_name = &sin_rx;
702 msg.msg_namelen = sizeof(sin_rx);
703 msg.msg_control = NULL;
704 msg.msg_controllen = 0;
705
706 /* build send message */ 705 /* build send message */
707 hc->sendmsg.msg_name = &hc->sin_remote; 706 hc->sendmsg.msg_name = &hc->sin_remote;
708 hc->sendmsg.msg_namelen = sizeof(hc->sin_remote); 707 hc->sendmsg.msg_namelen = sizeof(hc->sin_remote);
@@ -719,12 +718,9 @@ l1oip_socket_thread(void *data)
719 printk(KERN_DEBUG "%s: socket created and open\n", 718 printk(KERN_DEBUG "%s: socket created and open\n",
720 __func__); 719 __func__);
721 while (!signal_pending(current)) { 720 while (!signal_pending(current)) {
722 struct kvec iov = { 721 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1,
723 .iov_base = recvbuf, 722 recvbuf_size);
724 .iov_len = recvbuf_size, 723 recvlen = sock_recvmsg(socket, &msg, 0);
725 };
726 recvlen = kernel_recvmsg(socket, &msg, &iov, 1,
727 recvbuf_size, 0);
728 if (recvlen > 0) { 724 if (recvlen > 0) {
729 l1oip_socket_parse(hc, &sin_rx, recvbuf, recvlen); 725 l1oip_socket_parse(hc, &sin_rx, recvbuf, recvlen);
730 } else { 726 } else {
diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c
index 7d49d4865298..ed46aaca0ba3 100644
--- a/drivers/staging/lustre/lnet/lnet/lib-socket.c
+++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c
@@ -314,19 +314,20 @@ lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout)
314 long jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC); 314 long jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC);
315 unsigned long then; 315 unsigned long then;
316 struct timeval tv; 316 struct timeval tv;
317 struct kvec iov = {
318 .iov_base = buffer,
319 .iov_len = nob
320 };
321 struct msghdr msg = {
322 .msg_flags = 0
323 };
317 324
318 LASSERT(nob > 0); 325 LASSERT(nob > 0);
319 LASSERT(jiffies_left > 0); 326 LASSERT(jiffies_left > 0);
320 327
321 for (;;) { 328 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, nob);
322 struct kvec iov = {
323 .iov_base = buffer,
324 .iov_len = nob
325 };
326 struct msghdr msg = {
327 .msg_flags = 0
328 };
329 329
330 for (;;) {
330 /* Set receive timeout to remaining time */ 331 /* Set receive timeout to remaining time */
331 jiffies_to_timeval(jiffies_left, &tv); 332 jiffies_to_timeval(jiffies_left, &tv);
332 rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, 333 rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
@@ -338,7 +339,7 @@ lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout)
338 } 339 }
339 340
340 then = jiffies; 341 then = jiffies;
341 rc = kernel_recvmsg(sock, &msg, &iov, 1, nob, 0); 342 rc = sock_recvmsg(sock, &msg, 0);
342 jiffies_left -= jiffies - then; 343 jiffies_left -= jiffies - then;
343 344
344 if (rc < 0) 345 if (rc < 0)
@@ -347,10 +348,7 @@ lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout)
347 if (!rc) 348 if (!rc)
348 return -ECONNRESET; 349 return -ECONNRESET;
349 350
350 buffer = ((char *)buffer) + rc; 351 if (!msg_data_left(&msg))
351 nob -= rc;
352
353 if (!nob)
354 return 0; 352 return 0;
355 353
356 if (jiffies_left <= 0) 354 if (jiffies_left <= 0)
diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c
index 05707850f93a..cff79ea0c01d 100644
--- a/fs/dlm/lowcomms.c
+++ b/fs/dlm/lowcomms.c
@@ -675,9 +675,9 @@ static int receive_from_sock(struct connection *con)
675 nvec = 2; 675 nvec = 2;
676 } 676 }
677 len = iov[0].iov_len + iov[1].iov_len; 677 len = iov[0].iov_len + iov[1].iov_len;
678 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, iov, nvec, len);
678 679
679 r = ret = kernel_recvmsg(con->sock, &msg, iov, nvec, len, 680 r = ret = sock_recvmsg(con->sock, &msg, MSG_DONTWAIT | MSG_NOSIGNAL);
680 MSG_DONTWAIT | MSG_NOSIGNAL);
681 if (ret <= 0) 681 if (ret <= 0)
682 goto out_close; 682 goto out_close;
683 else if (ret == len) 683 else if (ret == len)
diff --git a/fs/ncpfs/sock.c b/fs/ncpfs/sock.c
index efb176b1751a..4c13174d85b7 100644
--- a/fs/ncpfs/sock.c
+++ b/fs/ncpfs/sock.c
@@ -39,7 +39,8 @@ static int _recv(struct socket *sock, void *buf, int size, unsigned flags)
39{ 39{
40 struct msghdr msg = {NULL, }; 40 struct msghdr msg = {NULL, };
41 struct kvec iov = {buf, size}; 41 struct kvec iov = {buf, size};
42 return kernel_recvmsg(sock, &msg, &iov, 1, size, flags); 42 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, size);
43 return sock_recvmsg(sock, &msg, flags);
43} 44}
44 45
45static int _send(struct socket *sock, const void *buff, int len) 46static int _send(struct socket *sock, const void *buff, int len)
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index bebe59feca58..eac5140aac47 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -918,7 +918,8 @@ static int o2net_recv_tcp_msg(struct socket *sock, void *data, size_t len)
918{ 918{
919 struct kvec vec = { .iov_len = len, .iov_base = data, }; 919 struct kvec vec = { .iov_len = len, .iov_base = data, };
920 struct msghdr msg = { .msg_flags = MSG_DONTWAIT, }; 920 struct msghdr msg = { .msg_flags = MSG_DONTWAIT, };
921 return kernel_recvmsg(sock, &msg, &vec, 1, len, msg.msg_flags); 921 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &vec, 1, len);
922 return sock_recvmsg(sock, &msg, MSG_DONTWAIT);
922} 923}
923 924
924static int o2net_send_tcp_msg(struct socket *sock, struct kvec *vec, 925static int o2net_send_tcp_msg(struct socket *sock, struct kvec *vec,
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;