]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: remove noblock parameter from skb_recv_datagram()
authorOliver Hartkopp <socketcan@hartkopp.net>
Mon, 4 Apr 2022 16:30:22 +0000 (18:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Jun 2022 12:28:02 +0000 (14:28 +0200)
[ Upstream commit f4b41f062c424209e3939a81e6da022e049a45f2 ]

skb_recv_datagram() has two parameters 'flags' and 'noblock' that are
merged inside skb_recv_datagram() by 'flags | (noblock ? MSG_DONTWAIT : 0)'

As 'flags' may contain MSG_DONTWAIT as value most callers split the 'flags'
into 'flags' and 'noblock' with finally obsolete bit operations like this:

skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &rc);

And this is not even done consistently with the 'flags' parameter.

This patch removes the obsolete and costly splitting into two parameters
and only performs bit operations when really needed on the caller side.

One missing conversion thankfully reported by kernel test robot. I missed
to enable kunit tests to build the mctp code.

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
37 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/can/bcm.c
net/can/isotp.c
net/can/j1939/socket.c
net/can/raw.c
net/core/datagram.c
net/ieee802154/socket.c
net/ipv4/ping.c
net/ipv4/raw.c
net/ipv6/raw.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/mctp/af_mctp.c
net/mctp/test/route-test.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/qrtr/af_qrtr.c
net/rose/af_rose.c
net/unix/af_unix.c
net/vmw_vsock/vmci_transport.c
net/x25/af_x25.c

index a6606736d8c5033aeccf48d2692e63832796a9fc..2776ca5fc33f39019062b3d9fb8f02547a5e4139 100644 (file)
@@ -121,7 +121,7 @@ mISDN_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
        if (sk->sk_state == MISDN_CLOSED)
                return 0;
 
-       skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                return err;
 
index e172743948ed777d4672b85f3584e1f03ba3bd53..ce2cbb5903d7bc9ae490fc1cc290556f631d1e33 100644 (file)
@@ -1012,8 +1012,7 @@ static int pppoe_recvmsg(struct socket *sock, struct msghdr *m,
                goto end;
        }
 
-       skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
-                               flags & MSG_DONTWAIT, &error);
+       skb = skb_recv_datagram(sk, flags, &error);
        if (error < 0)
                goto end;
 
index 3a30cae8b0a55da8657b060bdddee6ad9e853f66..2394441fa3dd5e256e66ca2d424f30b0a47263ae 100644 (file)
@@ -3836,8 +3836,7 @@ struct sk_buff *__skb_try_recv_datagram(struct sock *sk,
 struct sk_buff *__skb_recv_datagram(struct sock *sk,
                                    struct sk_buff_head *sk_queue,
                                    unsigned int flags, int *off, int *err);
-struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
-                                 int *err);
+struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned int flags, int *err);
 __poll_t datagram_poll(struct file *file, struct socket *sock,
                           struct poll_table_struct *wait);
 int skb_copy_datagram_iter(const struct sk_buff *from, int offset,
index bf5736c1d4584ec977586eae44d36db0042f7132..a06f4d4a6f476a651abe9c1ad67eac0cb8a0264f 100644 (file)
@@ -1753,8 +1753,7 @@ static int atalk_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        int err = 0;
        struct sk_buff *skb;
 
-       skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
-                                               flags & MSG_DONTWAIT, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        lock_sock(sk);
 
        if (!skb)
index 1cfa9bf1d18713afc7191ddecb256bfb3844154e..d0c8ab7ff8f6a8eaef31d2626739f3225ac59ad5 100644 (file)
@@ -540,7 +540,7 @@ int vcc_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
            !test_bit(ATM_VF_READY, &vcc->flags))
                return 0;
 
-       skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &error);
+       skb = skb_recv_datagram(sk, flags, &error);
        if (!skb)
                return error;
 
index 289f355e18531e4a7ab954b1e2f45138dbf7b1bd..95393bb2760b3e322d531679451c81e2a3877b29 100644 (file)
@@ -1676,8 +1676,7 @@ static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        }
 
        /* Now we can treat all alike */
-       skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
-                               flags & MSG_DONTWAIT, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (skb == NULL)
                goto out;
 
index a0cb2e3da8d4c05b5c0198da2dce3c270109ce26..62705734343b61a03c1669286d6adc4bf2856ec4 100644 (file)
@@ -251,7 +251,6 @@ EXPORT_SYMBOL(bt_accept_dequeue);
 int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
                    int flags)
 {
-       int noblock = flags & MSG_DONTWAIT;
        struct sock *sk = sock->sk;
        struct sk_buff *skb;
        size_t copied;
@@ -263,7 +262,7 @@ int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
        if (flags & MSG_OOB)
                return -EOPNOTSUPP;
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb) {
                if (sk->sk_shutdown & RCV_SHUTDOWN)
                        return 0;
index 33b3c0ffc3399dbb6eab07a7b378b9441647116d..189e3115c8c62c947872d62b8b0744d8b96d8620 100644 (file)
@@ -1453,7 +1453,6 @@ static void hci_sock_cmsg(struct sock *sk, struct msghdr *msg,
 static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg,
                            size_t len, int flags)
 {
-       int noblock = flags & MSG_DONTWAIT;
        struct sock *sk = sock->sk;
        struct sk_buff *skb;
        int copied, err;
@@ -1470,7 +1469,7 @@ static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg,
        if (sk->sk_state == BT_CLOSED)
                return 0;
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                return err;
 
index 2b8892d502f7f67fd140c5b40da28b749359fb4d..251e666ba9a28d0f4f480995dec252592d481b97 100644 (file)
@@ -282,7 +282,7 @@ static int caif_seqpkt_recvmsg(struct socket *sock, struct msghdr *m,
        if (flags & MSG_OOB)
                goto read_error;
 
-       skb = skb_recv_datagram(sk, flags, 0 , &ret);
+       skb = skb_recv_datagram(sk, flags, &ret);
        if (!skb)
                goto read_error;
        copylen = skb->len;
index 95d209b52e6a6df1b3df9504afc2c486c8271961..64c07e650bb412cf11ebb4a9cdcefa00f4e9fcc8 100644 (file)
@@ -1632,12 +1632,9 @@ static int bcm_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        struct sock *sk = sock->sk;
        struct sk_buff *skb;
        int error = 0;
-       int noblock;
        int err;
 
-       noblock =  flags & MSG_DONTWAIT;
-       flags   &= ~MSG_DONTWAIT;
-       skb = skb_recv_datagram(sk, flags, noblock, &error);
+       skb = skb_recv_datagram(sk, flags, &error);
        if (!skb)
                return error;
 
index 1e7c6a460ef9a39d2c313c8cbb964b73585f2fbf..35a1ae61744ca0564a0e0cd1046eb573d991ac56 100644 (file)
@@ -1055,7 +1055,6 @@ static int isotp_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        struct sock *sk = sock->sk;
        struct sk_buff *skb;
        struct isotp_sock *so = isotp_sk(sk);
-       int noblock = flags & MSG_DONTWAIT;
        int ret = 0;
 
        if (flags & ~(MSG_DONTWAIT | MSG_TRUNC | MSG_PEEK))
@@ -1064,8 +1063,7 @@ static int isotp_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        if (!so->bound)
                return -EADDRNOTAVAIL;
 
-       flags &= ~MSG_DONTWAIT;
-       skb = skb_recv_datagram(sk, flags, noblock, &ret);
+       skb = skb_recv_datagram(sk, flags, &ret);
        if (!skb)
                return ret;
 
index 6dff4510687a49791a4e6c01f3f5fe12669d8153..0bb4fd3f6264d64b5872baa35f8c2535fe22eaa5 100644 (file)
@@ -802,7 +802,7 @@ static int j1939_sk_recvmsg(struct socket *sock, struct msghdr *msg,
                return sock_recv_errqueue(sock->sk, msg, size, SOL_CAN_J1939,
                                          SCM_J1939_ERRQUEUE);
 
-       skb = skb_recv_datagram(sk, flags, 0, &ret);
+       skb = skb_recv_datagram(sk, flags, &ret);
        if (!skb)
                return ret;
 
index 7105fa4824e4b4f48b30186828126c59fd5f2938..0cf728dcff36f1f75dfb6f97943a15f8e4f5fb45 100644 (file)
@@ -846,16 +846,12 @@ static int raw_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        struct sock *sk = sock->sk;
        struct sk_buff *skb;
        int err = 0;
-       int noblock;
-
-       noblock = flags & MSG_DONTWAIT;
-       flags &= ~MSG_DONTWAIT;
 
        if (flags & MSG_ERRQUEUE)
                return sock_recv_errqueue(sk, msg, size,
                                          SOL_CAN_RAW, SCM_CAN_RAW_ERRQUEUE);
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                return err;
 
index ee290776c661d02fd65aaa38ed9d5b5c2b6bb946..70126d15ca6e0cba07675d3441da277b0ee48660 100644 (file)
@@ -310,12 +310,11 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk,
 EXPORT_SYMBOL(__skb_recv_datagram);
 
 struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned int flags,
-                                 int noblock, int *err)
+                                 int *err)
 {
        int off = 0;
 
-       return __skb_recv_datagram(sk, &sk->sk_receive_queue,
-                                  flags | (noblock ? MSG_DONTWAIT : 0),
+       return __skb_recv_datagram(sk, &sk->sk_receive_queue, flags,
                                   &off, err);
 }
 EXPORT_SYMBOL(skb_recv_datagram);
index 3b2366a88c3ccbae787669c58a2827048aa4552c..a725dd9bbda8bc66a1c65182ac9b707d62ac1152 100644 (file)
@@ -314,7 +314,8 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
        int err = -EOPNOTSUPP;
        struct sk_buff *skb;
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
 
@@ -703,7 +704,8 @@ static int dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
        struct dgram_sock *ro = dgram_sk(sk);
        DECLARE_SOCKADDR(struct sockaddr_ieee802154 *, saddr, msg->msg_name);
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
 
index aa9a11b20d18e9a11dd36199217ff670227a92f9..4e5ceca7ff7f9b6e52fdfd4867e9e8fd7096b660 100644 (file)
@@ -871,7 +871,8 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
        if (flags & MSG_ERRQUEUE)
                return inet_recv_error(sk, msg, len, addr_len);
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
 
index 9f97b9cbf7b37e41648cbc98fb994adeb63f43cb..c9dd9603f2e733873109ddf1d7a23695b0bca100 100644 (file)
@@ -769,7 +769,8 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                goto out;
        }
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
 
index c51d5ce3711c2e61e9ea2c1b22cb5ec4ee95ae7b..8bb41f3b246a9728dd6e738b76389a9cf8b56097 100644 (file)
@@ -477,7 +477,8 @@ static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
        if (np->rxpmtu && np->rxopt.bits.rxpmtu)
                return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
 
index a1760add5bf1e758975aba33a051b8cf1542c6dd..a0385ddbffcfc775b74768d5a889fcf7cbec1ee8 100644 (file)
@@ -1223,7 +1223,6 @@ static void iucv_process_message_q(struct sock *sk)
 static int iucv_sock_recvmsg(struct socket *sock, struct msghdr *msg,
                             size_t len, int flags)
 {
-       int noblock = flags & MSG_DONTWAIT;
        struct sock *sk = sock->sk;
        struct iucv_sock *iucv = iucv_sk(sk);
        unsigned int copied, rlen;
@@ -1242,7 +1241,7 @@ static int iucv_sock_recvmsg(struct socket *sock, struct msghdr *msg,
 
        /* receive/dequeue next skb:
         * the function understands MSG_PEEK and, thus, does not dequeue skb */
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb) {
                if (sk->sk_shutdown & RCV_SHUTDOWN)
                        return 0;
index d93bde65735937804b2722721a1d0c303c1e3279..c249b84efbb20ed931947b869e259913b54c5533 100644 (file)
@@ -3700,7 +3700,7 @@ static int pfkey_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
        if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC|MSG_CMSG_COMPAT))
                goto out;
 
-       skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (skb == NULL)
                goto out;
 
index b3edafa5fba4a3cc8b01b5a66e37ee198f31eea1..c6a5cc2d88e72d02cf82d07fa683983f8cac4552 100644 (file)
@@ -526,7 +526,8 @@ static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg,
        if (flags & MSG_OOB)
                goto out;
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
 
index d54dbd01d86f1e949c9a564221849caeeca0bfd5..8f76e647adbbd0f344127d48d31479a42562d4bd 100644 (file)
@@ -672,7 +672,8 @@ static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
        if (flags & MSG_ERRQUEUE)
                return ipv6_recv_error(sk, msg, len, addr_len);
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
 
index bf35710127dd082370ecdaecdd9edff7315f3b8f..8be1fdc68a0bbdc8ee6ef1186f278dc6badd325a 100644 (file)
@@ -191,8 +191,7 @@ static int pppol2tp_recvmsg(struct socket *sock, struct msghdr *msg,
                goto end;
 
        err = 0;
-       skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
-                               flags & MSG_DONTWAIT, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto end;
 
index e22b0cbb2f35385c7111a63c935b643ace11b6e4..221863afc4b1248c7afa179518abc2931c7f9191 100644 (file)
@@ -216,7 +216,7 @@ static int mctp_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
        if (flags & ~(MSG_DONTWAIT | MSG_TRUNC | MSG_PEEK))
                return -EOPNOTSUPP;
 
-       skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &rc);
+       skb = skb_recv_datagram(sk, flags, &rc);
        if (!skb)
                return rc;
 
index 61205cf4007465a01c2d7b3def1c413a5666df35..24df29e135ed6fbfc1637b7ab87822d19d20527b 100644 (file)
@@ -352,7 +352,7 @@ static void mctp_test_route_input_sk(struct kunit *test)
        if (params->deliver) {
                KUNIT_EXPECT_EQ(test, rc, 0);
 
-               skb2 = skb_recv_datagram(sock->sk, 0, 1, &rc);
+               skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
                KUNIT_EXPECT_NOT_ERR_OR_NULL(test, skb2);
                KUNIT_EXPECT_EQ(test, skb->len, 1);
 
@@ -360,7 +360,7 @@ static void mctp_test_route_input_sk(struct kunit *test)
 
        } else {
                KUNIT_EXPECT_NE(test, rc, 0);
-               skb2 = skb_recv_datagram(sock->sk, 0, 1, &rc);
+               skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
                KUNIT_EXPECT_PTR_EQ(test, skb2, NULL);
        }
 
@@ -423,7 +423,7 @@ static void mctp_test_route_input_sk_reasm(struct kunit *test)
                rc = mctp_route_input(&rt->rt, skb);
        }
 
-       skb2 = skb_recv_datagram(sock->sk, 0, 1, &rc);
+       skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
 
        if (params->rx_len) {
                KUNIT_EXPECT_NOT_ERR_OR_NULL(test, skb2);
@@ -582,7 +582,7 @@ static void mctp_test_route_input_sk_keys(struct kunit *test)
        rc = mctp_route_input(&rt->rt, skb);
 
        /* (potentially) receive message */
-       skb2 = skb_recv_datagram(sock->sk, 0, 1, &rc);
+       skb2 = skb_recv_datagram(sock->sk, MSG_DONTWAIT, &rc);
 
        if (params->deliver)
                KUNIT_EXPECT_NOT_ERR_OR_NULL(test, skb2);
index 73e9c0a9c187674cced15dbec079734489c3329f..0cd91f813a3bd16da13d139e779a54217b563d22 100644 (file)
@@ -1931,7 +1931,6 @@ static int netlink_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
        struct scm_cookie scm;
        struct sock *sk = sock->sk;
        struct netlink_sock *nlk = nlk_sk(sk);
-       int noblock = flags & MSG_DONTWAIT;
        size_t copied;
        struct sk_buff *skb, *data_skb;
        int err, ret;
@@ -1941,7 +1940,7 @@ static int netlink_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
 
        copied = 0;
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (skb == NULL)
                goto out;
 
index fa9dc2ba39418b06bd1915e05dd8f2af5ec00ca2..6f7f4392cffb1bd382a89ebe925a7cad2d730b44 100644 (file)
@@ -1159,7 +1159,8 @@ static int nr_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        }
 
        /* Now we can treat all alike */
-       if ((skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &er)) == NULL) {
+       skb = skb_recv_datagram(sk, flags, &er);
+       if (!skb) {
                release_sock(sk);
                return er;
        }
index 4ca35791c93b734f0b1bc32a82bfca1c9b3740ed..77642d18a3b437ea3c733fadce93ec463a900498 100644 (file)
@@ -821,7 +821,6 @@ static int llcp_sock_sendmsg(struct socket *sock, struct msghdr *msg,
 static int llcp_sock_recvmsg(struct socket *sock, struct msghdr *msg,
                             size_t len, int flags)
 {
-       int noblock = flags & MSG_DONTWAIT;
        struct sock *sk = sock->sk;
        unsigned int copied, rlen;
        struct sk_buff *skb, *cskb;
@@ -842,7 +841,7 @@ static int llcp_sock_recvmsg(struct socket *sock, struct msghdr *msg,
        if (flags & (MSG_OOB))
                return -EOPNOTSUPP;
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
        if (!skb) {
                pr_err("Recv datagram failed state %d %d %d",
                       sk->sk_state, err, sock_error(sk));
index 0ca214ab5aeff97f7bdc166537c4aafe37dd807f..8dd569765f96e9c5ff851515dc5f2823dfa804f2 100644 (file)
@@ -238,7 +238,6 @@ static int rawsock_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
 static int rawsock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
                           int flags)
 {
-       int noblock = flags & MSG_DONTWAIT;
        struct sock *sk = sock->sk;
        struct sk_buff *skb;
        int copied;
@@ -246,7 +245,7 @@ static int rawsock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
 
        pr_debug("sock=%p sk=%p len=%zu flags=%d\n", sock, sk, len, flags);
 
-       skb = skb_recv_datagram(sk, flags, noblock, &rc);
+       skb = skb_recv_datagram(sk, flags, &rc);
        if (!skb)
                return rc;
 
index 002d2b9c69dd1f95f234fe38f87dbf3a9481b0da..243566129784a8f06e86483a735307c81442ac21 100644 (file)
@@ -3426,7 +3426,7 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
         *      but then it will block.
         */
 
-       skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
+       skb = skb_recv_datagram(sk, flags, &err);
 
        /*
         *      An error occurred so return it. Because skb_recv_datagram()
index 393e6aa7a5927d4b8ef61a35d99d41c4cad8c815..3f2e62b63dd4293a11ba88ca294050829461361a 100644 (file)
@@ -123,7 +123,8 @@ static int pn_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                        MSG_CMSG_COMPAT))
                goto out_nofree;
 
-       skb = skb_recv_datagram(sk, flags, noblock, &rval);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &rval);
        if (skb == NULL)
                goto out_nofree;
 
index 65d463ad87707782a44152014fa760798554145f..441a267065923bcd80e7fef8536976c9c8a8c515 100644 (file)
@@ -772,7 +772,8 @@ static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp,
        u8 pipe_handle, enabled, n_sb;
        u8 aligned = 0;
 
-       skb = skb_recv_datagram(sk, 0, flags & O_NONBLOCK, errp);
+       skb = skb_recv_datagram(sk, (flags & O_NONBLOCK) ? MSG_DONTWAIT : 0,
+                               errp);
        if (!skb)
                return NULL;
 
@@ -1267,7 +1268,8 @@ static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                        return -EINVAL;
        }
 
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       flags |= (noblock ? MSG_DONTWAIT : 0);
+       skb = skb_recv_datagram(sk, flags, &err);
        lock_sock(sk);
        if (skb == NULL) {
                if (err == -ENOTCONN && sk->sk_state == TCP_CLOSE_WAIT)
index ec2322529727820d60e1fa13e1422d6ed8431608..5c2fb992803b7acbeed3d712104d45d7e0b3c68f 100644 (file)
@@ -1035,8 +1035,7 @@ static int qrtr_recvmsg(struct socket *sock, struct msghdr *msg,
                return -EADDRNOTAVAIL;
        }
 
-       skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
-                               flags & MSG_DONTWAIT, &rc);
+       skb = skb_recv_datagram(sk, flags, &rc);
        if (!skb) {
                release_sock(sk);
                return rc;
index 30a1cf4c16c6737d2acc587eadb853274caf5219..bf2d986a6bc392a9d830b1dfa7fbaa3bca969aa3 100644 (file)
@@ -1230,7 +1230,8 @@ static int rose_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
                return -ENOTCONN;
 
        /* Now we can treat all alike */
-       if ((skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT, flags & MSG_DONTWAIT, &er)) == NULL)
+       skb = skb_recv_datagram(sk, flags, &er);
+       if (!skb)
                return er;
 
        qbit = (skb->data[0] & ROSE_Q_BIT) == ROSE_Q_BIT;
index 4aed12e94221ad1663a79836f08c6d778e00d032..6114d69b8a2daf6d3b0b1a05d7e7fc7d609a131e 100644 (file)
@@ -1643,7 +1643,8 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags,
         * so that no locks are necessary.
         */
 
-       skb = skb_recv_datagram(sk, 0, flags&O_NONBLOCK, &err);
+       skb = skb_recv_datagram(sk, (flags & O_NONBLOCK) ? MSG_DONTWAIT : 0,
+                               &err);
        if (!skb) {
                /* This means receive shutdown. */
                if (err == 0)
@@ -2500,7 +2501,7 @@ static int unix_read_sock(struct sock *sk, read_descriptor_t *desc,
                int used, err;
 
                mutex_lock(&u->iolock);
-               skb = skb_recv_datagram(sk, 0, 1, &err);
+               skb = skb_recv_datagram(sk, MSG_DONTWAIT, &err);
                mutex_unlock(&u->iolock);
                if (!skb)
                        return err;
index b17dc9745188e4f1840881209017a23f00c65af9..b14f0ed7427bc4f35307fc28de6e4908ae659448 100644 (file)
@@ -1732,19 +1732,16 @@ static int vmci_transport_dgram_dequeue(struct vsock_sock *vsk,
                                        int flags)
 {
        int err;
-       int noblock;
        struct vmci_datagram *dg;
        size_t payload_len;
        struct sk_buff *skb;
 
-       noblock = flags & MSG_DONTWAIT;
-
        if (flags & MSG_OOB || flags & MSG_ERRQUEUE)
                return -EOPNOTSUPP;
 
        /* Retrieve the head sk_buff from the socket's receive queue. */
        err = 0;
-       skb = skb_recv_datagram(&vsk->sk, flags, noblock, &err);
+       skb = skb_recv_datagram(&vsk->sk, flags, &err);
        if (!skb)
                return err;
 
index 3a171828638b1a01c4d76189b832a87843de5e4e..6bc2ac8d8146dcfe9dd7fdfe4f7031ca2ef54266 100644 (file)
@@ -1315,8 +1315,7 @@ static int x25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        } else {
                /* Now we can treat all alike */
                release_sock(sk);
-               skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
-                                       flags & MSG_DONTWAIT, &rc);
+               skb = skb_recv_datagram(sk, flags, &rc);
                lock_sock(sk);
                if (!skb)
                        goto out;