net: pppolac/pppopns: Replace msg.msg_iov with iov_iter_kvec()
authorGuenter Roeck <groeck@chromium.org>
Tue, 1 Mar 2016 17:44:17 +0000 (09:44 -0800)
committerGuenter Roeck <groeck@chromium.org>
Wed, 2 Mar 2016 19:22:53 +0000 (19:22 +0000)
Commit 1af89c1ef3b6 ("Hack: net: PPPoPNS and PPPoLAC build fixes for 4.1")
fixed the build for PPPoPNS and PPPoLAC by re-introducing a field in
struct msghdr which was removed upstream. Re-introducing the field doesn't
get it used, so it is quite likely that the code never worked. Fix it up for
good.

Fixes: 1af89c1ef3b6 ("Hack: net: PPPoPNS and PPPoLAC build fixes for 4.1")
Signed-off-by: Guenter Roeck <groeck@chromium.org>
drivers/net/ppp/pppolac.c
drivers/net/ppp/pppopns.c
include/linux/socket.h

index 1b8180cc1d4d85db07b9abae1cc4c00dd455f449..0184c96579e9847b5aadefaf9c13c3444d2e2b97 100644 (file)
@@ -206,11 +206,10 @@ static void pppolac_xmit_core(struct work_struct *delivery_work)
        while ((skb = skb_dequeue(&delivery_queue))) {
                struct sock *sk_udp = skb->sk;
                struct kvec iov = {.iov_base = skb->data, .iov_len = skb->len};
-               struct msghdr msg = {
-                       .msg_iov = (struct iovec *)&iov,
-                       .msg_iovlen = 1,
-                       .msg_flags = MSG_NOSIGNAL | MSG_DONTWAIT,
-               };
+               struct msghdr msg = { 0 };
+
+               iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iov, 1,
+                             skb->len);
                sk_udp->sk_prot->sendmsg(sk_udp, &msg, skb->len);
                kfree_skb(skb);
        }
index 568bb45cfeac81ef4063084e605b5fd40b2413b3..d9e06039794e510ae0674480c32971d97d452d34 100644 (file)
@@ -189,11 +189,10 @@ static void pppopns_xmit_core(struct work_struct *delivery_work)
        while ((skb = skb_dequeue(&delivery_queue))) {
                struct sock *sk_raw = skb->sk;
                struct kvec iov = {.iov_base = skb->data, .iov_len = skb->len};
-               struct msghdr msg = {
-                       .msg_iov = (struct iovec *)&iov,
-                       .msg_iovlen = 1,
-                       .msg_flags = MSG_NOSIGNAL | MSG_DONTWAIT,
-               };
+               struct msghdr msg = { 0 };
+
+               iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iov, 1,
+                             skb->len);
                sk_raw->sk_prot->sendmsg(sk_raw, &msg, skb->len);
                kfree_skb(skb);
        }
index 18a8337c895965ae0536aa45d31efb4cf57a1e97..5bf59c8493b763c6dc11ccce18da9c0ac6c0da46 100644 (file)
@@ -47,10 +47,6 @@ struct linger {
 struct msghdr {
        void            *msg_name;      /* ptr to socket address structure */
        int             msg_namelen;    /* size of socket address structure */
-#if defined(CONFIG_PPPOLAC) || defined(CONFIG_PPPOPNS)
-       struct iovec    *msg_iov;       /* scatter/gather array */
-       __kernel_size_t msg_iovlen;     /* # elements in msg_iov */
-#endif
        struct iov_iter msg_iter;       /* data */
        void            *msg_control;   /* ancillary data */
        __kernel_size_t msg_controllen; /* ancillary data buffer length */