OSDN Git Service

net: remove noblock parameter from skb_recv_datagram()
authorOliver Hartkopp <socketcan@hartkopp.net>
Mon, 4 Apr 2022 16:30:22 +0000 (18:30 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Apr 2022 12:45:26 +0000 (13:45 +0100)
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>
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 a660673..2776ca5 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 3619520..1b41cd9 100644 (file)
@@ -1011,8 +1011,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 3a30cae..2394441 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 bf5736c..a06f4d4 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 1cfa9bf..d0c8ab7 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 363d47f..116481e 100644 (file)
@@ -1669,8 +1669,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 a0cb2e3..6270573 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 33b3c0f..189e311 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 2b8892d..251e666 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 95d209b..64c07e6 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 bafb0fb..02d81ef 100644 (file)
@@ -1047,7 +1047,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))
@@ -1056,8 +1055,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 6dff451..0bb4fd3 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 7105fa4..0cf728d 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 ee29077..70126d1 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 3b2366a..a725dd9 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 3ee9475..550dc5c 100644 (file)
@@ -861,7 +861,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 9f97b9c..c9dd960 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 c51d5ce..8bb41f3 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 a1760ad..a0385dd 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 fd51db3..d09ec26 100644 (file)
@@ -3696,7 +3696,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 b3edafa..c6a5cc2 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 96f9757..97fde8a 100644 (file)
@@ -671,7 +671,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 bf35710..8be1fdc 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 f0702d9..5f204eb 100644 (file)
@@ -196,7 +196,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 61205cf..24df29e 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 47a876c..9fa85bb 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 fa9dc2b..6f7f439 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 4ca3579..77642d1 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 0ca214a..8dd5697 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 c39c098..d3caaf4 100644 (file)
@@ -3421,7 +3421,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 393e6aa..3f2e62b 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 65d463a..441a267 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 ec23225..5c2fb99 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 30a1cf4..bf2d986 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 e71a312..fecbd95 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 b17dc97..b14f0ed 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 3a17182..6bc2ac8 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;