Messages in this thread Patch in this message | | | Date | Mon, 20 Jun 2022 15:44:08 +0200 | Subject | Re: [PATCH 5.18 081/141] net: remove noblock parameter from skb_recv_datagram() | From | Oliver Hartkopp <> |
| |
Hello Greg,
as already answered to Sascha:
---
Hello Sasha,
this patch is some kind of improvement/simplification to reduce and clean up the number of variables passed through skb_recv_datagram() call.
There is no functional change and therefore no need to backport this patch IMO.
The 'Reported-by:' tag just came from the kernel test robot when posting the original patch and getting direct feedback on some missing calling sites.
Best regards, Oliver
On 6/20/22 14:50, Greg Kroah-Hartman wrote: > From: Oliver Hartkopp <socketcan@hartkopp.net> > > [ 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 a6606736d8c5..2776ca5fc33f 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 e172743948ed..ce2cbb5903d7 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 3a30cae8b0a5..2394441fa3dd 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 bf5736c1d458..a06f4d4a6f47 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 1cfa9bf1d187..d0c8ab7ff8f6 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 289f355e1853..95393bb2760b 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 a0cb2e3da8d4..62705734343b 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 33b3c0ffc339..189e3115c8c6 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 2b8892d502f7..251e666ba9a2 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 95d209b52e6a..64c07e650bb4 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 1e7c6a460ef9..35a1ae61744c 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 6dff4510687a..0bb4fd3f6264 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 7105fa4824e4..0cf728dcff36 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 ee290776c661..70126d15ca6e 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 3b2366a88c3c..a725dd9bbda8 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 aa9a11b20d18..4e5ceca7ff7f 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 9f97b9cbf7b3..c9dd9603f2e7 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 c51d5ce3711c..8bb41f3b246a 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 a1760add5bf1..a0385ddbffcf 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 d93bde657359..c249b84efbb2 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 b3edafa5fba4..c6a5cc2d88e7 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 d54dbd01d86f..8f76e647adbb 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 bf35710127dd..8be1fdc68a0b 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 e22b0cbb2f35..221863afc4b1 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 61205cf40074..24df29e135ed 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 73e9c0a9c187..0cd91f813a3b 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 fa9dc2ba3941..6f7f4392cffb 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 4ca35791c93b..77642d18a3b4 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 0ca214ab5aef..8dd569765f96 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 002d2b9c69dd..243566129784 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 393e6aa7a592..3f2e62b63dd4 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 65d463ad8770..441a26706592 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 ec2322529727..5c2fb992803b 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 30a1cf4c16c6..bf2d986a6bc3 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 4aed12e94221..6114d69b8a2d 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 b17dc9745188..b14f0ed7427b 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 3a171828638b..6bc2ac8d8146 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;
| |