summarylogtreecommitdiffstats
path: root/0081-net-remove-noblock-parameter-from-skb_recv_datagram.patch
diff options
context:
space:
mode:
Diffstat (limited to '0081-net-remove-noblock-parameter-from-skb_recv_datagram.patch')
-rw-r--r--0081-net-remove-noblock-parameter-from-skb_recv_datagram.patch711
1 files changed, 711 insertions, 0 deletions
diff --git a/0081-net-remove-noblock-parameter-from-skb_recv_datagram.patch b/0081-net-remove-noblock-parameter-from-skb_recv_datagram.patch
new file mode 100644
index 000000000000..4a5e5a367153
--- /dev/null
+++ b/0081-net-remove-noblock-parameter-from-skb_recv_datagram.patch
@@ -0,0 +1,711 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Oliver Hartkopp <socketcan@hartkopp.net>
+Date: Mon, 4 Apr 2022 18:30:22 +0200
+Subject: [PATCH] net: remove noblock parameter from skb_recv_datagram()
+
+[ 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>
+---
+ drivers/isdn/mISDN/socket.c | 2 +-
+ drivers/net/ppp/pppoe.c | 3 +--
+ include/linux/skbuff.h | 3 +--
+ net/appletalk/ddp.c | 3 +--
+ net/atm/common.c | 2 +-
+ net/ax25/af_ax25.c | 3 +--
+ net/bluetooth/af_bluetooth.c | 3 +--
+ net/bluetooth/hci_sock.c | 3 +--
+ net/caif/caif_socket.c | 2 +-
+ net/can/bcm.c | 5 +----
+ net/can/isotp.c | 4 +---
+ net/can/j1939/socket.c | 2 +-
+ net/can/raw.c | 6 +-----
+ net/core/datagram.c | 5 ++---
+ net/ieee802154/socket.c | 6 ++++--
+ net/ipv4/ping.c | 3 ++-
+ net/ipv4/raw.c | 3 ++-
+ net/ipv6/raw.c | 3 ++-
+ net/iucv/af_iucv.c | 3 +--
+ net/key/af_key.c | 2 +-
+ net/l2tp/l2tp_ip.c | 3 ++-
+ net/l2tp/l2tp_ip6.c | 3 ++-
+ net/l2tp/l2tp_ppp.c | 3 +--
+ net/mctp/af_mctp.c | 2 +-
+ net/mctp/test/route-test.c | 8 ++++----
+ net/netlink/af_netlink.c | 3 +--
+ net/netrom/af_netrom.c | 3 ++-
+ net/nfc/llcp_sock.c | 3 +--
+ net/nfc/rawsock.c | 3 +--
+ net/packet/af_packet.c | 2 +-
+ net/phonet/datagram.c | 3 ++-
+ net/phonet/pep.c | 6 ++++--
+ net/qrtr/af_qrtr.c | 3 +--
+ net/rose/af_rose.c | 3 ++-
+ net/unix/af_unix.c | 5 +++--
+ net/vmw_vsock/vmci_transport.c | 5 +----
+ net/x25/af_x25.c | 3 +--
+ 37 files changed, 57 insertions(+), 70 deletions(-)
+
+diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c
+index a6606736d8c5033aeccf48d2692e63832796a9fc..2776ca5fc33f39019062b3d9fb8f02547a5e4139 100644
+--- a/drivers/isdn/mISDN/socket.c
++++ b/drivers/isdn/mISDN/socket.c
+@@ -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;
+
+diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
+index e172743948ed777d4672b85f3584e1f03ba3bd53..ce2cbb5903d7bc9ae490fc1cc290556f631d1e33 100644
+--- a/drivers/net/ppp/pppoe.c
++++ b/drivers/net/ppp/pppoe.c
+@@ -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;
+
+diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
+index 3a30cae8b0a55da8657b060bdddee6ad9e853f66..2394441fa3dd5e256e66ca2d424f30b0a47263ae 100644
+--- a/include/linux/skbuff.h
++++ b/include/linux/skbuff.h
+@@ -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,
+diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
+index bf5736c1d4584ec977586eae44d36db0042f7132..a06f4d4a6f476a651abe9c1ad67eac0cb8a0264f 100644
+--- a/net/appletalk/ddp.c
++++ b/net/appletalk/ddp.c
+@@ -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)
+diff --git a/net/atm/common.c b/net/atm/common.c
+index 1cfa9bf1d18713afc7191ddecb256bfb3844154e..d0c8ab7ff8f6a8eaef31d2626739f3225ac59ad5 100644
+--- a/net/atm/common.c
++++ b/net/atm/common.c
+@@ -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;
+
+diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
+index 289f355e18531e4a7ab954b1e2f45138dbf7b1bd..95393bb2760b3e322d531679451c81e2a3877b29 100644
+--- a/net/ax25/af_ax25.c
++++ b/net/ax25/af_ax25.c
+@@ -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;
+
+diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
+index a0cb2e3da8d4c05b5c0198da2dce3c270109ce26..62705734343b61a03c1669286d6adc4bf2856ec4 100644
+--- a/net/bluetooth/af_bluetooth.c
++++ b/net/bluetooth/af_bluetooth.c
+@@ -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;
+diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
+index 33b3c0ffc3399dbb6eab07a7b378b9441647116d..189e3115c8c62c947872d62b8b0744d8b96d8620 100644
+--- a/net/bluetooth/hci_sock.c
++++ b/net/bluetooth/hci_sock.c
+@@ -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;
+
+diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
+index 2b8892d502f7f67fd140c5b40da28b749359fb4d..251e666ba9a28d0f4f480995dec252592d481b97 100644
+--- a/net/caif/caif_socket.c
++++ b/net/caif/caif_socket.c
+@@ -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;
+diff --git a/net/can/bcm.c b/net/can/bcm.c
+index 95d209b52e6a6df1b3df9504afc2c486c8271961..64c07e650bb412cf11ebb4a9cdcefa00f4e9fcc8 100644
+--- a/net/can/bcm.c
++++ b/net/can/bcm.c
+@@ -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;
+
+diff --git a/net/can/isotp.c b/net/can/isotp.c
+index 1e7c6a460ef9a39d2c313c8cbb964b73585f2fbf..35a1ae61744ca0564a0e0cd1046eb573d991ac56 100644
+--- a/net/can/isotp.c
++++ b/net/can/isotp.c
+@@ -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;
+
+diff --git a/net/can/j1939/socket.c b/net/can/j1939/socket.c
+index 6dff4510687a49791a4e6c01f3f5fe12669d8153..0bb4fd3f6264d64b5872baa35f8c2535fe22eaa5 100644
+--- a/net/can/j1939/socket.c
++++ b/net/can/j1939/socket.c
+@@ -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;
+
+diff --git a/net/can/raw.c b/net/can/raw.c
+index 7105fa4824e4b4f48b30186828126c59fd5f2938..0cf728dcff36f1f75dfb6f97943a15f8e4f5fb45 100644
+--- a/net/can/raw.c
++++ b/net/can/raw.c
+@@ -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;
+
+diff --git a/net/core/datagram.c b/net/core/datagram.c
+index ee290776c661d02fd65aaa38ed9d5b5c2b6bb946..70126d15ca6e0cba07675d3441da277b0ee48660 100644
+--- a/net/core/datagram.c
++++ b/net/core/datagram.c
+@@ -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);
+diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c
+index 3b2366a88c3ccbae787669c58a2827048aa4552c..a725dd9bbda8bc66a1c65182ac9b707d62ac1152 100644
+--- a/net/ieee802154/socket.c
++++ b/net/ieee802154/socket.c
+@@ -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;
+
+diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
+index aa9a11b20d18e9a11dd36199217ff670227a92f9..4e5ceca7ff7f9b6e52fdfd4867e9e8fd7096b660 100644
+--- a/net/ipv4/ping.c
++++ b/net/ipv4/ping.c
+@@ -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;
+
+diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
+index 9f97b9cbf7b37e41648cbc98fb994adeb63f43cb..c9dd9603f2e733873109ddf1d7a23695b0bca100 100644
+--- a/net/ipv4/raw.c
++++ b/net/ipv4/raw.c
+@@ -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;
+
+diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
+index c51d5ce3711c2e61e9ea2c1b22cb5ec4ee95ae7b..8bb41f3b246a9728dd6e738b76389a9cf8b56097 100644
+--- a/net/ipv6/raw.c
++++ b/net/ipv6/raw.c
+@@ -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;
+
+diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
+index a1760add5bf1e758975aba33a051b8cf1542c6dd..a0385ddbffcfc775b74768d5a889fcf7cbec1ee8 100644
+--- a/net/iucv/af_iucv.c
++++ b/net/iucv/af_iucv.c
+@@ -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;
+diff --git a/net/key/af_key.c b/net/key/af_key.c
+index d93bde65735937804b2722721a1d0c303c1e3279..c249b84efbb20ed931947b869e259913b54c5533 100644
+--- a/net/key/af_key.c
++++ b/net/key/af_key.c
+@@ -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;
+
+diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
+index b3edafa5fba4a3cc8b01b5a66e37ee198f31eea1..c6a5cc2d88e72d02cf82d07fa683983f8cac4552 100644
+--- a/net/l2tp/l2tp_ip.c
++++ b/net/l2tp/l2tp_ip.c
+@@ -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;
+
+diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
+index d54dbd01d86f1e949c9a564221849caeeca0bfd5..8f76e647adbbd0f344127d48d31479a42562d4bd 100644
+--- a/net/l2tp/l2tp_ip6.c
++++ b/net/l2tp/l2tp_ip6.c
+@@ -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;
+
+diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
+index bf35710127dd082370ecdaecdd9edff7315f3b8f..8be1fdc68a0bbdc8ee6ef1186f278dc6badd325a 100644
+--- a/net/l2tp/l2tp_ppp.c
++++ b/net/l2tp/l2tp_ppp.c
+@@ -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;
+
+diff --git a/net/mctp/af_mctp.c b/net/mctp/af_mctp.c
+index e22b0cbb2f35385c7111a63c935b643ace11b6e4..221863afc4b1248c7afa179518abc2931c7f9191 100644
+--- a/net/mctp/af_mctp.c
++++ b/net/mctp/af_mctp.c
+@@ -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;
+
+diff --git a/net/mctp/test/route-test.c b/net/mctp/test/route-test.c
+index 61205cf4007465a01c2d7b3def1c413a5666df35..24df29e135ed6fbfc1637b7ab87822d19d20527b 100644
+--- a/net/mctp/test/route-test.c
++++ b/net/mctp/test/route-test.c
+@@ -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);
+diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
+index 73e9c0a9c187674cced15dbec079734489c3329f..0cd91f813a3bd16da13d139e779a54217b563d22 100644
+--- a/net/netlink/af_netlink.c
++++ b/net/netlink/af_netlink.c
+@@ -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;
+
+diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
+index fa9dc2ba39418b06bd1915e05dd8f2af5ec00ca2..6f7f4392cffb1bd382a89ebe925a7cad2d730b44 100644
+--- a/net/netrom/af_netrom.c
++++ b/net/netrom/af_netrom.c
+@@ -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;
+ }
+diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c
+index 4ca35791c93b734f0b1bc32a82bfca1c9b3740ed..77642d18a3b437ea3c733fadce93ec463a900498 100644
+--- a/net/nfc/llcp_sock.c
++++ b/net/nfc/llcp_sock.c
+@@ -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));
+diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c
+index 0ca214ab5aeff97f7bdc166537c4aafe37dd807f..8dd569765f96e9c5ff851515dc5f2823dfa804f2 100644
+--- a/net/nfc/rawsock.c
++++ b/net/nfc/rawsock.c
+@@ -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;
+
+diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
+index 002d2b9c69dd1f95f234fe38f87dbf3a9481b0da..243566129784a8f06e86483a735307c81442ac21 100644
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -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()
+diff --git a/net/phonet/datagram.c b/net/phonet/datagram.c
+index 393e6aa7a5927d4b8ef61a35d99d41c4cad8c815..3f2e62b63dd4293a11ba88ca294050829461361a 100644
+--- a/net/phonet/datagram.c
++++ b/net/phonet/datagram.c
+@@ -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;
+
+diff --git a/net/phonet/pep.c b/net/phonet/pep.c
+index 65d463ad87707782a44152014fa760798554145f..441a267065923bcd80e7fef8536976c9c8a8c515 100644
+--- a/net/phonet/pep.c
++++ b/net/phonet/pep.c
+@@ -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)
+diff --git a/net/qrtr/af_qrtr.c b/net/qrtr/af_qrtr.c
+index ec2322529727820d60e1fa13e1422d6ed8431608..5c2fb992803b7acbeed3d712104d45d7e0b3c68f 100644
+--- a/net/qrtr/af_qrtr.c
++++ b/net/qrtr/af_qrtr.c
+@@ -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;
+diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
+index 30a1cf4c16c6737d2acc587eadb853274caf5219..bf2d986a6bc392a9d830b1dfa7fbaa3bca969aa3 100644
+--- a/net/rose/af_rose.c
++++ b/net/rose/af_rose.c
+@@ -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;
+diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
+index 4aed12e94221ad1663a79836f08c6d778e00d032..6114d69b8a2daf6d3b0b1a05d7e7fc7d609a131e 100644
+--- a/net/unix/af_unix.c
++++ b/net/unix/af_unix.c
+@@ -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;
+diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
+index b17dc9745188e4f1840881209017a23f00c65af9..b14f0ed7427bc4f35307fc28de6e4908ae659448 100644
+--- a/net/vmw_vsock/vmci_transport.c
++++ b/net/vmw_vsock/vmci_transport.c
+@@ -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;
+
+diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
+index 3a171828638b1a01c4d76189b832a87843de5e4e..6bc2ac8d8146dcfe9dd7fdfe4f7031ca2ef54266 100644
+--- a/net/x25/af_x25.c
++++ b/net/x25/af_x25.c
+@@ -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;