net: Add and use skb_copy_datagram_msg() helper.
authorDavid S. Miller <davem@davemloft.net>
Wed, 5 Nov 2014 21:46:40 +0000 (16:46 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Nov 2014 21:46:40 +0000 (16:46 -0500)
This encapsulates all of the skb_copy_datagram_iovec() callers
with call argument signature "skb, offset, msghdr->msg_iov, length".

When we move to iov_iters in the networking, the iov_iter object will
sit in the msghdr.

Having a helper like this means there will be less places to touch
during that transformation.

Based upon descriptions and patch from Al Viro.

Signed-off-by: David S. Miller <davem@davemloft.net>
43 files changed:
drivers/isdn/mISDN/socket.c
drivers/net/ppp/pppoe.c
include/linux/skbuff.h
net/appletalk/ddp.c
net/atm/common.c
net/ax25/af_ax25.c
net/bluetooth/af_bluetooth.c
net/bluetooth/hci_sock.c
net/caif/caif_socket.c
net/core/sock.c
net/dccp/proto.c
net/ieee802154/dgram.c
net/ieee802154/raw.c
net/ipv4/ip_sockglue.c
net/ipv4/ping.c
net/ipv4/raw.c
net/ipv4/tcp.c
net/ipv4/udp.c
net/ipv6/datagram.c
net/ipv6/raw.c
net/ipv6/udp.c
net/ipx/af_ipx.c
net/irda/af_irda.c
net/iucv/af_iucv.c
net/key/af_key.c
net/l2tp/l2tp_ip.c
net/l2tp/l2tp_ip6.c
net/l2tp/l2tp_ppp.c
net/llc/af_llc.c
net/netlink/af_netlink.c
net/netrom/af_netrom.c
net/nfc/llcp_sock.c
net/nfc/rawsock.c
net/packet/af_packet.c
net/phonet/datagram.c
net/phonet/pep.c
net/rose/af_rose.c
net/rxrpc/ar-recvmsg.c
net/sctp/socket.c
net/tipc/socket.c
net/unix/af_unix.c
net/vmw_vsock/vmci_transport.c
net/x25/af_x25.c

index 1be82284cf9dfaa8ab5f5078bed78c3aec095ed3..dcbd8589f0c4fc29034da257fa907612dbd3f02e 100644 (file)
@@ -163,7 +163,7 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
        memcpy(skb_push(skb, MISDN_HEADER_LEN), mISDN_HEAD_P(skb),
               MISDN_HEADER_LEN);
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
 
        mISDN_sock_cmsg(sk, msg, skb);
 
index 6c9c16d76935f5db5db13bdb54b0e6530b15c8ed..443cbbf5c55f684db9ee4bcfbd69fc06706c0957 100644 (file)
@@ -981,7 +981,7 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock,
 
        if (skb) {
                total_len = min_t(size_t, total_len, skb->len);
-               error = skb_copy_datagram_iovec(skb, 0, m->msg_iov, total_len);
+               error = skb_copy_datagram_msg(skb, 0, m, total_len);
                if (error == 0) {
                        consume_skb(skb);
                        return total_len;
index 74ed3441396929b498916fea43d43c89ca3ad1ec..39ec7530ae27984e98b06f5cb2a116c9669662dd 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/bug.h>
 #include <linux/cache.h>
 #include <linux/rbtree.h>
+#include <linux/socket.h>
 
 #include <linux/atomic.h>
 #include <asm/types.h>
@@ -2639,6 +2640,11 @@ unsigned int datagram_poll(struct file *file, struct socket *sock,
                           struct poll_table_struct *wait);
 int skb_copy_datagram_iovec(const struct sk_buff *from, int offset,
                            struct iovec *to, int size);
+static inline int skb_copy_datagram_msg(const struct sk_buff *from, int offset,
+                                       struct msghdr *msg, int size)
+{
+       return skb_copy_datagram_iovec(from, offset, msg->msg_iov, size);
+}
 int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, int hlen,
                                     struct iovec *iov);
 int skb_copy_datagram_from_iovec(struct sk_buff *skb, int offset,
index c00897f65a31eb2a7f9cf8fa8da71bfd56cc7fc5..425942db17f64820248d1d830b9ecdd12ebdf8e6 100644 (file)
@@ -1758,7 +1758,7 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
                copied = size;
                msg->msg_flags |= MSG_TRUNC;
        }
-       err = skb_copy_datagram_iovec(skb, offset, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, offset, msg, copied);
 
        if (!err && msg->msg_name) {
                DECLARE_SOCKADDR(struct sockaddr_at *, sat, msg->msg_name);
index 6a765156a3f6b81fcd63f43504d1a7faca8f206b..9cd1ccae9a11914a2c082ad2fdab1c7898f55707 100644 (file)
@@ -554,7 +554,7 @@ int vcc_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
                msg->msg_flags |= MSG_TRUNC;
        }
 
-       error = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       error = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (error)
                return error;
        sock_recv_ts_and_drops(msg, sk, skb);
index c35c3f48fc0ff6e130d940b3d8b24b208250a738..f4f835e1937859da05ed48b18e813985727ce67a 100644 (file)
@@ -1634,7 +1634,7 @@ static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
                msg->msg_flags |= MSG_TRUNC;
        }
 
-       skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       skb_copy_datagram_msg(skb, 0, msg, copied);
 
        if (msg->msg_name) {
                ax25_digi digi;
index 339c74ad45538f931ee1c31edb96c3f3f3298074..0a7cc565f93e0ba73ffbe0e93e7b82854134f595 100644 (file)
@@ -237,7 +237,7 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
        }
 
        skb_reset_transport_header(skb);
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err == 0) {
                sock_recv_ts_and_drops(msg, sk, skb);
 
@@ -328,7 +328,7 @@ int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
                }
 
                chunk = min_t(unsigned int, skb->len, size);
-               if (skb_copy_datagram_iovec(skb, 0, msg->msg_iov, chunk)) {
+               if (skb_copy_datagram_msg(skb, 0, msg, chunk)) {
                        skb_queue_head(&sk->sk_receive_queue, skb);
                        if (!copied)
                                copied = -EFAULT;
index 115f149362ba84d4b24b0cb217b49de3a5cf03bb..29e1ec7189bd0a027b43efaf179fe448c2d8f946 100644 (file)
@@ -878,7 +878,7 @@ static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
        }
 
        skb_reset_transport_header(skb);
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
 
        switch (hci_pi(sk)->channel) {
        case HCI_CHANNEL_RAW:
index 43f750e88e199e451d7de049255257b46cd947ab..fbcd156099fbbaea571f694883e4b69c8fa5f979 100644 (file)
@@ -293,7 +293,7 @@ static int caif_seqpkt_recvmsg(struct kiocb *iocb, struct socket *sock,
                copylen = len;
        }
 
-       ret = skb_copy_datagram_iovec(skb, 0, m->msg_iov, copylen);
+       ret = skb_copy_datagram_msg(skb, 0, m, copylen);
        if (ret)
                goto out_free;
 
index 15e0c67b1069654af22ad9afe5c993cbcaafaec5..ac56dd06c306f3712e57ce8e4724c79565589499 100644 (file)
@@ -2457,7 +2457,7 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
                msg->msg_flags |= MSG_TRUNC;
                copied = len;
        }
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto out_free_skb;
 
index 5ab6627cf3704a8479d35170546d1d683185dbbd..8e6ae9422a7bf05543de4ba8f279e40de3c55c8b 100644 (file)
@@ -896,7 +896,7 @@ verify_sock_status:
                else if (len < skb->len)
                        msg->msg_flags |= MSG_TRUNC;
 
-               if (skb_copy_datagram_iovec(skb, 0, msg->msg_iov, len)) {
+               if (skb_copy_datagram_msg(skb, 0, msg, len)) {
                        /* Exception. Bailout! */
                        len = -EFAULT;
                        break;
index ef2ad8aaef1361f2e061519dd773cd0f03dd4b30..fc9193eabd41650290a053a71d11fd0fd2f57e60 100644 (file)
@@ -324,7 +324,7 @@ static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk,
        }
 
        /* FIXME: skip headers if necessary ?! */
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto done;
 
index 9d1f64806f02127808986a84b36fae92e33df4a2..73a4d53463dec13f6bdf4b318cbc97c0ce1e76d7 100644 (file)
@@ -195,7 +195,7 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                copied = len;
        }
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto done;
 
index c373a9ad45556815d1d95f4faf71b8f8a3f61996..21894df662622bcb0f4bec01a2e612480276b92b 100644 (file)
@@ -424,7 +424,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
                msg->msg_flags |= MSG_TRUNC;
                copied = len;
        }
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto out_free_skb;
 
index 57f7c98041394998fe390735aa5b8cd2602b3f90..736236c3e554433d5e8c1e9972135bdd9f5561ed 100644 (file)
@@ -875,7 +875,7 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
        }
 
        /* Don't bother checking the checksum */
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto done;
 
index 739db3100c2375ebd5113c4224b20423a585cc12..ee8fa4bf3b734d051330b38bc1fa029bcd392774 100644 (file)
@@ -718,7 +718,7 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                copied = len;
        }
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto done;
 
index 39ec0c379545afe07d6016c9180e9c408d22d4df..c239f4740d10b10b67ef4fa44c831851fb9e1dcf 100644 (file)
@@ -1377,7 +1377,7 @@ static int tcp_peek_sndq(struct sock *sk, struct msghdr *msg, int len)
        /* XXX -- need to support SO_PEEK_OFF */
 
        skb_queue_walk(&sk->sk_write_queue, skb) {
-               err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, skb->len);
+               err = skb_copy_datagram_msg(skb, 0, msg, skb->len);
                if (err)
                        break;
 
@@ -1833,8 +1833,7 @@ do_prequeue:
                }
 
                if (!(flags & MSG_TRUNC)) {
-                       err = skb_copy_datagram_iovec(skb, offset,
-                                                     msg->msg_iov, used);
+                       err = skb_copy_datagram_msg(skb, offset, msg, used);
                        if (err) {
                                /* Exception. Bailout! */
                                if (!copied)
index 3f001db723510c1da73c0b68fc7f41395f2e9e91..df19027f44f3d6fbe13dec78d3b085968dbf2329 100644 (file)
@@ -1281,8 +1281,8 @@ try_again:
        }
 
        if (skb_csum_unnecessary(skb))
-               err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr),
-                                             msg->msg_iov, copied);
+               err = skb_copy_datagram_msg(skb, sizeof(struct udphdr),
+                                           msg, copied);
        else {
                err = skb_copy_and_csum_datagram_iovec(skb,
                                                       sizeof(struct udphdr),
index 2cdc38338be3fda267d7137cb20fc8bbe72c4466..5c6996e44b1455aeb4d3d391852457d3f12dd634 100644 (file)
@@ -351,7 +351,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
                msg->msg_flags |= MSG_TRUNC;
                copied = len;
        }
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto out_free_skb;
 
@@ -445,7 +445,7 @@ int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
                msg->msg_flags |= MSG_TRUNC;
                copied = len;
        }
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto out_free_skb;
 
index 075a0fb400e72c686707feea2ecd00074c25bbc0..0cbcf98f2cabe2adfacb1f07372524099e56391b 100644 (file)
@@ -486,11 +486,11 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
        }
 
        if (skb_csum_unnecessary(skb)) {
-               err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+               err = skb_copy_datagram_msg(skb, 0, msg, copied);
        } else if (msg->msg_flags&MSG_TRUNC) {
                if (__skb_checksum_complete(skb))
                        goto csum_copy_err;
-               err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+               err = skb_copy_datagram_msg(skb, 0, msg, copied);
        } else {
                err = skb_copy_and_csum_datagram_iovec(skb, 0, msg->msg_iov);
                if (err == -EINVAL)
index f6ba535b6febe40aad990e7f9541446fc573d511..9b6809232b178c16d699ce3d152196b8c4cb096b 100644 (file)
@@ -424,8 +424,8 @@ try_again:
        }
 
        if (skb_csum_unnecessary(skb))
-               err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr),
-                                             msg->msg_iov, copied);
+               err = skb_copy_datagram_msg(skb, sizeof(struct udphdr),
+                                           msg, copied);
        else {
                err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov);
                if (err == -EINVAL)
index 313ef4644069d3182bb5c9b9c863b244d73bf084..a0c75366c93b427b2c51b71a558832642e8e40b0 100644 (file)
@@ -1805,8 +1805,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
                msg->msg_flags |= MSG_TRUNC;
        }
 
-       rc = skb_copy_datagram_iovec(skb, sizeof(struct ipxhdr), msg->msg_iov,
-                                    copied);
+       rc = skb_copy_datagram_msg(skb, sizeof(struct ipxhdr), msg, copied);
        if (rc)
                goto out_free;
        if (skb->tstamp.tv64)
index 92fafd485deb610cad0e6a03ac41ede8aed29553..980bc2670a13d975805cc15d2ecdd2705812228f 100644 (file)
@@ -1396,7 +1396,7 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock,
                copied = size;
                msg->msg_flags |= MSG_TRUNC;
        }
-       skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       skb_copy_datagram_msg(skb, 0, msg, copied);
 
        skb_free_datagram(sk, skb);
 
index a089b6b91650b9c17e786e1045cbeac537612dd1..057b5647ef925ef5fbc0edcded57226ca511b8b8 100644 (file)
@@ -1355,7 +1355,7 @@ static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
                sk->sk_shutdown = sk->sk_shutdown | RCV_SHUTDOWN;
 
        cskb = skb;
-       if (skb_copy_datagram_iovec(cskb, offset, msg->msg_iov, copied)) {
+       if (skb_copy_datagram_msg(cskb, offset, msg, copied)) {
                if (!(flags & MSG_PEEK))
                        skb_queue_head(&sk->sk_receive_queue, skb);
                return -EFAULT;
index 1847ec4e39305f205c68acaf50579bfceff4d91f..e5883091a8c6b4bd985ebaaa5b4c0b1e401b652c 100644 (file)
@@ -3654,7 +3654,7 @@ static int pfkey_recvmsg(struct kiocb *kiocb,
        }
 
        skb_reset_transport_header(skb);
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto out_free;
 
index 369a9822488c45fc10be28ca00300e9382645a9e..a6cc1fed2b529a9e97248d1a6e47585067c4e24b 100644 (file)
@@ -528,7 +528,7 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
                copied = len;
        }
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto done;
 
index 0edb263cc002e84d7192e63552bcdcf260aeb6fa..2177b960da870faf6e611b205532e7447e4384ed 100644 (file)
@@ -672,7 +672,7 @@ static int l2tp_ip6_recvmsg(struct kiocb *iocb, struct sock *sk,
                copied = len;
        }
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto done;
 
index b704a9356208f5cc3064085b9d82eab52542dd5a..c559bcdf4679eb4e68123bc4d4f31cabf6b035f9 100644 (file)
@@ -208,7 +208,7 @@ static int pppol2tp_recvmsg(struct kiocb *iocb, struct socket *sock,
        else if (len < skb->len)
                msg->msg_flags |= MSG_TRUNC;
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, len);
+       err = skb_copy_datagram_msg(skb, 0, msg, len);
        if (likely(err == 0))
                err = len;
 
index bb9cbc17d9267bc6f554f4ed985d3596fefcd91f..af662669f9513e4b643448d201846ca3fc647ccd 100644 (file)
@@ -819,8 +819,7 @@ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock,
                        used = len;
 
                if (!(flags & MSG_TRUNC)) {
-                       int rc = skb_copy_datagram_iovec(skb, offset,
-                                                        msg->msg_iov, used);
+                       int rc = skb_copy_datagram_msg(skb, offset, msg, used);
                        if (rc) {
                                /* Exception. Bailout! */
                                if (!copied)
index f1de72de273e20e7422bf6de42ebbca712affacf..580b79452bec9555dfb9543d27b2dae0bdbc7a2d 100644 (file)
@@ -2401,7 +2401,7 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
        }
 
        skb_reset_transport_header(data_skb);
-       err = skb_copy_datagram_iovec(data_skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(data_skb, 0, msg, copied);
 
        if (msg->msg_name) {
                DECLARE_SOCKADDR(struct sockaddr_nl *, addr, msg->msg_name);
index 1b06a1fcf3e80acfe26a67e31dec1648ce6104f5..7e13f6afcd1fb774264a3fa890603fc1c633baaf 100644 (file)
@@ -1167,7 +1167,7 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
                msg->msg_flags |= MSG_TRUNC;
        }
 
-       er = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       er = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (er < 0) {
                skb_free_datagram(sk, skb);
                release_sock(sk);
index 51f077a92fa9220eb987b7b9185efcc75312328a..83bc785d5855a378dc1d5bda3a093aff13e86c05 100644 (file)
@@ -832,7 +832,7 @@ static int llcp_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
        copied = min_t(unsigned int, rlen, len);
 
        cskb = skb;
-       if (skb_copy_datagram_iovec(cskb, 0, msg->msg_iov, copied)) {
+       if (skb_copy_datagram_msg(cskb, 0, msg, copied)) {
                if (!(flags & MSG_PEEK))
                        skb_queue_head(&sk->sk_receive_queue, skb);
                return -EFAULT;
index 11c3544ea5466f54f8038ca19f500a831d1ca79f..9d7d2b7ba5e413ac81e038eb099de6be5d81cfe4 100644 (file)
@@ -269,7 +269,7 @@ static int rawsock_recvmsg(struct kiocb *iocb, struct socket *sock,
                copied = len;
        }
 
-       rc = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       rc = skb_copy_datagram_msg(skb, 0, msg, copied);
 
        skb_free_datagram(sk, skb);
 
index 87d20f48ff06195766e8ecd20a3fcfae5ccae690..4cd13d8de44bb15b2cdff8ee1f402f1c398786ca 100644 (file)
@@ -2953,7 +2953,7 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
                msg->msg_flags |= MSG_TRUNC;
        }
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (err)
                goto out_free;
 
index 290352c0e6b476c894bd33928c4bca6d9c862aae..0918bc21eae6483f4f98cbdcbf9063b0b2cc10fd 100644 (file)
@@ -150,7 +150,7 @@ static int pn_recvmsg(struct kiocb *iocb, struct sock *sk,
                copylen = len;
        }
 
-       rval = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copylen);
+       rval = skb_copy_datagram_msg(skb, 0, msg, copylen);
        if (rval) {
                rval = -EFAULT;
                goto out;
index 70a547ea51777784fdd545b4c86d7da69991a53a..44b2123e22b87a3cb0cc2e3999bc145fc1df4c8b 100644 (file)
@@ -1296,7 +1296,7 @@ copy:
        else
                len = skb->len;
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, len);
+       err = skb_copy_datagram_msg(skb, 0, msg, len);
        if (!err)
                err = (flags & MSG_TRUNC) ? skb->len : len;
 
index a85c1a086ae44f71b48be0112e08ae5164ac2c9e..9b600c20a7a326e357d4917f149d1f2276bee597 100644 (file)
@@ -1249,7 +1249,7 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
                msg->msg_flags |= MSG_TRUNC;
        }
 
-       skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       skb_copy_datagram_msg(skb, 0, msg, copied);
 
        if (msg->msg_name) {
                struct sockaddr_rose *srose;
index e9aaa65c07784cf9991f5bef279e4dab49a6912f..4575485ad1b4d02796717879e09ad9078e232617 100644 (file)
@@ -180,7 +180,7 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
                if (copy > len - copied)
                        copy = len - copied;
 
-               ret = skb_copy_datagram_iovec(skb, offset, msg->msg_iov, copy);
+               ret = skb_copy_datagram_msg(skb, offset, msg, copy);
 
                if (ret < 0)
                        goto copy_error;
index 634a2abb5f3a25f15ca99c4737190c1e5e17b27a..2120292c842d76cbe099e1ecae51d7d7f62982c5 100644 (file)
@@ -2095,7 +2095,7 @@ static int sctp_recvmsg(struct kiocb *iocb, struct sock *sk,
        if (copied > len)
                copied = len;
 
-       err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       err = skb_copy_datagram_msg(skb, 0, msg, copied);
 
        event = sctp_skb2event(skb);
 
index ad8a1a1e22756fb00186d0cd271d2ffabd0c9fee..591bbfa082a0a1d887c81fa387c472198594f40e 100644 (file)
@@ -1372,8 +1372,7 @@ restart:
                        sz = buf_len;
                        m->msg_flags |= MSG_TRUNC;
                }
-               res = skb_copy_datagram_iovec(buf, msg_hdr_sz(msg),
-                                             m->msg_iov, sz);
+               res = skb_copy_datagram_msg(buf, msg_hdr_sz(msg), m, sz);
                if (res)
                        goto exit;
                res = sz;
@@ -1473,8 +1472,8 @@ restart:
                needed = (buf_len - sz_copied);
                sz_to_copy = (sz <= needed) ? sz : needed;
 
-               res = skb_copy_datagram_iovec(buf, msg_hdr_sz(msg) + offset,
-                                             m->msg_iov, sz_to_copy);
+               res = skb_copy_datagram_msg(buf, msg_hdr_sz(msg) + offset,
+                                           m, sz_to_copy);
                if (res)
                        goto exit;
 
index e968843807320ea66a8b6421974fa182ab9d58aa..5eee625d113f795150c211ee32e346eb8dfe66d0 100644 (file)
@@ -1825,7 +1825,7 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock,
        else if (size < skb->len - skip)
                msg->msg_flags |= MSG_TRUNC;
 
-       err = skb_copy_datagram_iovec(skb, skip, msg->msg_iov, size);
+       err = skb_copy_datagram_msg(skb, skip, msg, size);
        if (err)
                goto out_free;
 
@@ -2030,8 +2030,8 @@ again:
                }
 
                chunk = min_t(unsigned int, unix_skb_len(skb) - skip, size);
-               if (skb_copy_datagram_iovec(skb, UNIXCB(skb).consumed + skip,
-                                           msg->msg_iov, chunk)) {
+               if (skb_copy_datagram_msg(skb, UNIXCB(skb).consumed + skip,
+                                         msg, chunk)) {
                        if (copied == 0)
                                copied = -EFAULT;
                        break;
index 9bb63ffec4f21424fe90af3a4b017c5ff701c97f..a57ddef7d5afcf295b2e4579bb59351b22d6b0aa 100644 (file)
@@ -1773,8 +1773,7 @@ static int vmci_transport_dgram_dequeue(struct kiocb *kiocb,
        }
 
        /* Place the datagram payload in the user's iovec. */
-       err = skb_copy_datagram_iovec(skb, sizeof(*dg), msg->msg_iov,
-               payload_len);
+       err = skb_copy_datagram_msg(skb, sizeof(*dg), msg, payload_len);
        if (err)
                goto out;
 
index 5ad4418ef093f3625ac5efb205dafc2590c4e0e6..59e785bfde6518124939f03795f17e214574268b 100644 (file)
@@ -1335,7 +1335,7 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock,
        /* Currently, each datagram always contains a complete record */
        msg->msg_flags |= MSG_EOR;
 
-       rc = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+       rc = skb_copy_datagram_msg(skb, 0, msg, copied);
        if (rc)
                goto out_free_dgram;