All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next v2] net: remove noblock parameter from recvmsg() entities
@ 2022-04-10 20:06 Oliver Hartkopp
  2022-04-10 20:34 ` Oliver Hartkopp
  2022-04-10 23:13 ` kernel test robot
  0 siblings, 2 replies; 3+ messages in thread
From: Oliver Hartkopp @ 2022-04-10 20:06 UTC (permalink / raw)
  To: netdev, kuba, davem; +Cc: Oliver Hartkopp

The internal recvmsg() functions have two parameters 'flags' and 'noblock'
that were merged inside skb_recv_datagram(). As a follow up patch to commit
f4b41f062c42 ("net: remove noblock parameter from skb_recv_datagram()")
this patch removes the separate 'noblock' parameter for recvmsg().

Analogue to the referenced patch for skb_recv_datagram() the 'flags' and
'noblock' parameters are unnecessarily split up with e.g.

err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
                           flags & ~MSG_DONTWAIT, &addr_len);

or in

err = INDIRECT_CALL_2(sk->sk_prot->recvmsg, tcp_recvmsg, udp_recvmsg,
                      sk, msg, size, flags & MSG_DONTWAIT,
                      flags & ~MSG_DONTWAIT, &addr_len);

instead of simply using only 'flags' all the time and check for MSG_DONTWAIT
flags where needed to check for the former separated no(n)block condition.

Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
---
 .../chelsio/inline_crypto/chtls/chtls.h       |  2 +-
 .../chelsio/inline_crypto/chtls/chtls_io.c    | 20 +++++++++----------
 include/net/ping.h                            |  2 +-
 include/net/sock.h                            |  3 +--
 include/net/tcp.h                             |  2 +-
 include/net/tls.h                             |  2 +-
 include/net/udp.h                             |  6 +++---
 net/core/sock.c                               |  3 +--
 net/ieee802154/socket.c                       |  6 ++----
 net/ipv4/af_inet.c                            |  5 ++---
 net/ipv4/ping.c                               |  3 +--
 net/ipv4/raw.c                                |  3 +--
 net/ipv4/tcp.c                                | 14 ++++++-------
 net/ipv4/tcp_bpf.c                            | 15 +++++++-------
 net/ipv4/udp.c                                |  9 ++++-----
 net/ipv4/udp_bpf.c                            | 16 +++++++--------
 net/ipv4/udp_impl.h                           |  2 +-
 net/ipv6/af_inet6.c                           |  5 ++---
 net/ipv6/raw.c                                |  3 +--
 net/ipv6/udp.c                                |  4 ++--
 net/ipv6/udp_impl.h                           |  2 +-
 net/l2tp/l2tp_ip.c                            |  3 +--
 net/l2tp/l2tp_ip6.c                           |  3 +--
 net/mptcp/protocol.c                          |  4 ++--
 net/phonet/datagram.c                         |  3 +--
 net/phonet/pep.c                              |  3 +--
 net/tls/tls_sw.c                              |  3 ---
 net/unix/af_unix.c                            |  6 ++----
 net/unix/unix_bpf.c                           |  5 ++---
 net/xfrm/espintcp.c                           |  4 +---
 30 files changed, 69 insertions(+), 92 deletions(-)

diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
index 9e2378013642..41714203ace8 100644
--- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
+++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
@@ -565,11 +565,11 @@ void chtls_close(struct sock *sk, long timeout);
 int chtls_disconnect(struct sock *sk, int flags);
 void chtls_shutdown(struct sock *sk, int how);
 void chtls_destroy_sock(struct sock *sk);
 int chtls_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);
 int chtls_recvmsg(struct sock *sk, struct msghdr *msg,
-		  size_t len, int nonblock, int flags, int *addr_len);
+		  size_t len, int flags, int *addr_len);
 int chtls_sendpage(struct sock *sk, struct page *page,
 		   int offset, size_t size, int flags);
 int send_tx_flowc_wr(struct sock *sk, int compl,
 		     u32 snd_nxt, u32 rcv_nxt);
 void chtls_tcp_push(struct sock *sk, int flags);
diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c
index c320cc8ca68d..0e7ed2d85482 100644
--- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c
+++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c
@@ -1424,11 +1424,11 @@ static void chtls_cleanup_rbuf(struct sock *sk, int copied)
 	if (must_send || credits >= thres)
 		tp->rcv_wup += send_rx_credits(csk, credits);
 }
 
 static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-			    int nonblock, int flags, int *addr_len)
+			    int flags, int *addr_len)
 {
 	struct chtls_sock *csk = rcu_dereference_sk_user_data(sk);
 	struct chtls_hws *hws = &csk->tlshws;
 	struct net_device *dev = csk->egress_dev;
 	struct adapter *adap = netdev2adap(dev);
@@ -1439,11 +1439,11 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	int target;
 	long timeo;
 
 	buffers_freed = 0;
 
-	timeo = sock_rcvtimeo(sk, nonblock);
+	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
 
 	if (unlikely(csk_flag(sk, CSK_UPDATE_RCV_WND)))
 		chtls_cleanup_rbuf(sk, copied);
 
@@ -1614,21 +1614,21 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 
 /*
  * Peek at data in a socket's receive buffer.
  */
 static int peekmsg(struct sock *sk, struct msghdr *msg,
-		   size_t len, int nonblock, int flags)
+		   size_t len, int flags)
 {
 	struct tcp_sock *tp = tcp_sk(sk);
 	u32 peek_seq, offset;
 	struct sk_buff *skb;
 	int copied = 0;
 	size_t avail;          /* amount of available data in current skb */
 	long timeo;
 
 	lock_sock(sk);
-	timeo = sock_rcvtimeo(sk, nonblock);
+	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 	peek_seq = tp->copied_seq;
 
 	do {
 		if (unlikely(tp->urg_data && tp->urg_seq == peek_seq)) {
 			if (copied)
@@ -1735,11 +1735,11 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,
 	release_sock(sk);
 	return copied;
 }
 
 int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-		  int nonblock, int flags, int *addr_len)
+		  int flags, int *addr_len)
 {
 	struct tcp_sock *tp = tcp_sk(sk);
 	struct chtls_sock *csk;
 	unsigned long avail;    /* amount of available data in current skb */
 	int buffers_freed;
@@ -1748,29 +1748,29 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	int target;             /* Read at least this many bytes */
 
 	buffers_freed = 0;
 
 	if (unlikely(flags & MSG_OOB))
-		return tcp_prot.recvmsg(sk, msg, len, nonblock, flags,
+		return tcp_prot.recvmsg(sk, msg, len, flags,
 					addr_len);
 
 	if (unlikely(flags & MSG_PEEK))
-		return peekmsg(sk, msg, len, nonblock, flags);
+		return peekmsg(sk, msg, len, flags);
 
 	if (sk_can_busy_loop(sk) &&
 	    skb_queue_empty_lockless(&sk->sk_receive_queue) &&
 	    sk->sk_state == TCP_ESTABLISHED)
-		sk_busy_loop(sk, nonblock);
+		sk_busy_loop(sk, flags & MSG_DONTWAIT);
 
 	lock_sock(sk);
 	csk = rcu_dereference_sk_user_data(sk);
 
 	if (is_tls_rx(csk))
-		return chtls_pt_recvmsg(sk, msg, len, nonblock,
+		return chtls_pt_recvmsg(sk, msg, len,
 					flags, addr_len);
 
-	timeo = sock_rcvtimeo(sk, nonblock);
+	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
 
 	if (unlikely(csk_flag(sk, CSK_UPDATE_RCV_WND)))
 		chtls_cleanup_rbuf(sk, copied);
 
diff --git a/include/net/ping.h b/include/net/ping.h
index 2fe78874318c..a873c1ac7368 100644
--- a/include/net/ping.h
+++ b/include/net/ping.h
@@ -69,11 +69,11 @@ void ping_close(struct sock *sk, long timeout);
 int  ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len);
 void ping_err(struct sk_buff *skb, int offset, u32 info);
 int  ping_getfrag(void *from, char *to, int offset, int fraglen, int odd,
 		  struct sk_buff *);
 
-int  ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
+int  ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		  int flags, int *addr_len);
 int  ping_common_sendmsg(int family, struct msghdr *msg, size_t len,
 			 void *user_icmph, size_t icmph_len);
 int  ping_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
 bool ping_rcv(struct sk_buff *skb);
diff --git a/include/net/sock.h b/include/net/sock.h
index c4b91fc19b9c..e6564d238d0e 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -1200,12 +1200,11 @@ struct proto {
 					unsigned int cmd, unsigned long arg);
 #endif
 	int			(*sendmsg)(struct sock *sk, struct msghdr *msg,
 					   size_t len);
 	int			(*recvmsg)(struct sock *sk, struct msghdr *msg,
-					   size_t len, int noblock, int flags,
-					   int *addr_len);
+					   size_t len, int flags, int *addr_len);
 	int			(*sendpage)(struct sock *sk, struct page *page,
 					int offset, size_t size, int flags);
 	int			(*bind)(struct sock *sk,
 					struct sockaddr *addr, int addr_len);
 	int			(*bind_add)(struct sock *sk,
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 6d50a662bf89..679b1964d494 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -405,11 +405,11 @@ int tcp_getsockopt(struct sock *sk, int level, int optname,
 bool tcp_bpf_bypass_getsockopt(int level, int optname);
 int tcp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
 		   unsigned int optlen);
 void tcp_set_keepalive(struct sock *sk, int val);
 void tcp_syn_ack_timeout(const struct request_sock *req);
-int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
+int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		int flags, int *addr_len);
 int tcp_set_rcvlowat(struct sock *sk, int val);
 int tcp_set_window_clamp(struct sock *sk, int val);
 void tcp_update_recv_tstamps(struct sk_buff *skb,
 			     struct scm_timestamping_internal *tss);
diff --git a/include/net/tls.h b/include/net/tls.h
index 6fe78361c8c8..b59f0a63292b 100644
--- a/include/net/tls.h
+++ b/include/net/tls.h
@@ -369,11 +369,11 @@ void tls_sw_release_resources_tx(struct sock *sk);
 void tls_sw_free_ctx_tx(struct tls_context *tls_ctx);
 void tls_sw_free_resources_rx(struct sock *sk);
 void tls_sw_release_resources_rx(struct sock *sk);
 void tls_sw_free_ctx_rx(struct tls_context *tls_ctx);
 int tls_sw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-		   int nonblock, int flags, int *addr_len);
+		   int flags, int *addr_len);
 bool tls_sw_sock_is_readable(struct sock *sk);
 ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,
 			   struct pipe_inode_info *pipe,
 			   size_t len, unsigned int flags);
 
diff --git a/include/net/udp.h b/include/net/udp.h
index f1c2a88c9005..c2dfe95f4da5 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -249,17 +249,17 @@ static inline bool udp_sk_bound_dev_eq(struct net *net, int bound_dev_if,
 void udp_destruct_sock(struct sock *sk);
 void skb_consume_udp(struct sock *sk, struct sk_buff *skb, int len);
 int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb);
 void udp_skb_destructor(struct sock *sk, struct sk_buff *skb);
 struct sk_buff *__skb_recv_udp(struct sock *sk, unsigned int flags,
-			       int noblock, int *off, int *err);
+			       int *off, int *err);
 static inline struct sk_buff *skb_recv_udp(struct sock *sk, unsigned int flags,
-					   int noblock, int *err)
+					   int *err)
 {
 	int off = 0;
 
-	return __skb_recv_udp(sk, flags, noblock, &off, err);
+	return __skb_recv_udp(sk, flags, &off, err);
 }
 
 int udp_v4_early_demux(struct sk_buff *skb);
 bool udp_sk_rx_dst_set(struct sock *sk, struct dst_entry *dst);
 int udp_get_port(struct sock *sk, unsigned short snum,
diff --git a/net/core/sock.c b/net/core/sock.c
index 7000403eaeb2..60f5ceca36f9 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -3486,12 +3486,11 @@ int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
 {
 	struct sock *sk = sock->sk;
 	int addr_len = 0;
 	int err;
 
-	err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
-				   flags & ~MSG_DONTWAIT, &addr_len);
+	err = sk->sk_prot->recvmsg(sk, msg, size, flags, &addr_len);
 	if (err >= 0)
 		msg->msg_namelen = addr_len;
 	return err;
 }
 EXPORT_SYMBOL(sock_common_recvmsg);
diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c
index a725dd9bbda8..f24852814fa3 100644
--- a/net/ieee802154/socket.c
+++ b/net/ieee802154/socket.c
@@ -306,17 +306,16 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
 out:
 	return err;
 }
 
 static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-		       int noblock, int flags, int *addr_len)
+		       int flags, int *addr_len)
 {
 	size_t copied = 0;
 	int err = -EOPNOTSUPP;
 	struct sk_buff *skb;
 
-	flags |= (noblock ? MSG_DONTWAIT : 0);
 	skb = skb_recv_datagram(sk, flags, &err);
 	if (!skb)
 		goto out;
 
 	copied = skb->len;
@@ -694,19 +693,18 @@ static int dgram_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
 out:
 	return err;
 }
 
 static int dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-			 int noblock, int flags, int *addr_len)
+			 int flags, int *addr_len)
 {
 	size_t copied = 0;
 	int err = -EOPNOTSUPP;
 	struct sk_buff *skb;
 	struct dgram_sock *ro = dgram_sk(sk);
 	DECLARE_SOCKADDR(struct sockaddr_ieee802154 *, saddr, msg->msg_name);
 
-	flags |= (noblock ? MSG_DONTWAIT : 0);
 	skb = skb_recv_datagram(sk, flags, &err);
 	if (!skb)
 		goto out;
 
 	copied = skb->len;
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 72fde2888ad2..195ecfa2f000 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -834,11 +834,11 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
 	return sock_no_sendpage(sock, page, offset, size, flags);
 }
 EXPORT_SYMBOL(inet_sendpage);
 
 INDIRECT_CALLABLE_DECLARE(int udp_recvmsg(struct sock *, struct msghdr *,
-					  size_t, int, int, int *));
+					  size_t, int, int *));
 int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
 		 int flags)
 {
 	struct sock *sk = sock->sk;
 	int addr_len = 0;
@@ -846,12 +846,11 @@ int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
 
 	if (likely(!(flags & MSG_ERRQUEUE)))
 		sock_rps_record_flow(sk);
 
 	err = INDIRECT_CALL_2(sk->sk_prot->recvmsg, tcp_recvmsg, udp_recvmsg,
-			      sk, msg, size, flags & MSG_DONTWAIT,
-			      flags & ~MSG_DONTWAIT, &addr_len);
+			      sk, msg, size, flags, &addr_len);
 	if (err >= 0)
 		msg->msg_namelen = addr_len;
 	return err;
 }
 EXPORT_SYMBOL(inet_recvmsg);
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
index 550dc5c795c0..64a5f02426ed 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -842,11 +842,11 @@ static int ping_v4_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 		goto back_from_confirm;
 	err = 0;
 	goto out;
 }
 
-int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
+int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		 int flags, int *addr_len)
 {
 	struct inet_sock *isk = inet_sk(sk);
 	int family = sk->sk_family;
 	struct sk_buff *skb;
@@ -859,11 +859,10 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
 		goto out;
 
 	if (flags & MSG_ERRQUEUE)
 		return inet_recv_error(sk, msg, len, addr_len);
 
-	flags |= (noblock ? MSG_DONTWAIT : 0);
 	skb = skb_recv_datagram(sk, flags, &err);
 	if (!skb)
 		goto out;
 
 	copied = skb->len;
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index c9dd9603f2e7..4056b0da85ea 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -751,11 +751,11 @@ static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
  *	This should be easy, if there is something there
  *	we return it, otherwise we block.
  */
 
 static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-		       int noblock, int flags, int *addr_len)
+		       int flags, int *addr_len)
 {
 	struct inet_sock *inet = inet_sk(sk);
 	size_t copied = 0;
 	int err = -EOPNOTSUPP;
 	DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);
@@ -767,11 +767,10 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	if (flags & MSG_ERRQUEUE) {
 		err = ip_recv_error(sk, msg, len, addr_len);
 		goto out;
 	}
 
-	flags |= (noblock ? MSG_DONTWAIT : 0);
 	skb = skb_recv_datagram(sk, flags, &err);
 	if (!skb)
 		goto out;
 
 	copied = skb->len;
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index e31cf137c614..1e003a3dd678 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1875,11 +1875,11 @@ static void tcp_zerocopy_set_hint_for_skb(struct sock *sk,
 	mappable_offset = find_next_mappable_frag(frag, zc->recv_skip_hint);
 	zc->recv_skip_hint = mappable_offset + partial_frag_remainder;
 }
 
 static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
-			      int nonblock, int flags,
+			      int flags,
 			      struct scm_timestamping_internal *tss,
 			      int *cmsg_flags);
 static int receive_fallback_to_copy(struct sock *sk,
 				    struct tcp_zerocopy_receive *zc, int inq,
 				    struct scm_timestamping_internal *tss)
@@ -1898,11 +1898,11 @@ static int receive_fallback_to_copy(struct sock *sk,
 	err = import_single_range(READ, (void __user *)copy_address,
 				  inq, &iov, &msg.msg_iter);
 	if (err)
 		return err;
 
-	err = tcp_recvmsg_locked(sk, &msg, inq, /*nonblock=*/1, /*flags=*/0,
+	err = tcp_recvmsg_locked(sk, &msg, inq, MSG_DONTWAIT,
 				 tss, &zc->msg_flags);
 	if (err < 0)
 		return err;
 
 	zc->copybuf_len = err;
@@ -2314,11 +2314,11 @@ static int tcp_inq_hint(struct sock *sk)
  *	tricks with *seq access order and skb->users are not required.
  *	Probably, code can be easily improved even more.
  */
 
 static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
-			      int nonblock, int flags,
+			      int flags,
 			      struct scm_timestamping_internal *tss,
 			      int *cmsg_flags)
 {
 	struct tcp_sock *tp = tcp_sk(sk);
 	int copied = 0;
@@ -2335,11 +2335,11 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
 	if (sk->sk_state == TCP_LISTEN)
 		goto out;
 
 	if (tp->recvmsg_inq)
 		*cmsg_flags = TCP_CMSG_INQ;
-	timeo = sock_rcvtimeo(sk, nonblock);
+	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 
 	/* Urgent data needs to be handled specially. */
 	if (flags & MSG_OOB)
 		goto recv_urg;
 
@@ -2554,11 +2554,11 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
 recv_sndq:
 	err = tcp_peek_sndq(sk, msg, len);
 	goto out;
 }
 
-int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
+int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		int flags, int *addr_len)
 {
 	int cmsg_flags = 0, ret, inq;
 	struct scm_timestamping_internal tss;
 
@@ -2566,14 +2566,14 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
 		return inet_recv_error(sk, msg, len, addr_len);
 
 	if (sk_can_busy_loop(sk) &&
 	    skb_queue_empty_lockless(&sk->sk_receive_queue) &&
 	    sk->sk_state == TCP_ESTABLISHED)
-		sk_busy_loop(sk, nonblock);
+		sk_busy_loop(sk, flags & MSG_DONTWAIT);
 
 	lock_sock(sk);
-	ret = tcp_recvmsg_locked(sk, msg, len, nonblock, flags, &tss,
+	ret = tcp_recvmsg_locked(sk, msg, len, flags, &tss,
 				 &cmsg_flags);
 	release_sock(sk);
 	sk_defer_free_flush(sk);
 
 	if (cmsg_flags && ret >= 0) {
diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c
index 1cdcb4df0eb7..be3947e70fec 100644
--- a/net/ipv4/tcp_bpf.c
+++ b/net/ipv4/tcp_bpf.c
@@ -172,11 +172,10 @@ static int tcp_msg_wait_data(struct sock *sk, struct sk_psock *psock,
 }
 
 static int tcp_bpf_recvmsg_parser(struct sock *sk,
 				  struct msghdr *msg,
 				  size_t len,
-				  int nonblock,
 				  int flags,
 				  int *addr_len)
 {
 	struct sk_psock *psock;
 	int copied;
@@ -184,11 +183,11 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,
 	if (unlikely(flags & MSG_ERRQUEUE))
 		return inet_recv_error(sk, msg, len, addr_len);
 
 	psock = sk_psock_get(sk);
 	if (unlikely(!psock))
-		return tcp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
+		return tcp_recvmsg(sk, msg, len, flags, addr_len);
 
 	lock_sock(sk);
 msg_bytes_ready:
 	copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
 	if (!copied) {
@@ -209,11 +208,11 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,
 		if (sk->sk_state == TCP_CLOSE) {
 			copied = -ENOTCONN;
 			goto out;
 		}
 
-		timeo = sock_rcvtimeo(sk, nonblock);
+		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 		if (!timeo) {
 			copied = -EAGAIN;
 			goto out;
 		}
 
@@ -232,41 +231,41 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,
 	sk_psock_put(sk, psock);
 	return copied;
 }
 
 static int tcp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-		    int nonblock, int flags, int *addr_len)
+			   int flags, int *addr_len)
 {
 	struct sk_psock *psock;
 	int copied, ret;
 
 	if (unlikely(flags & MSG_ERRQUEUE))
 		return inet_recv_error(sk, msg, len, addr_len);
 
 	psock = sk_psock_get(sk);
 	if (unlikely(!psock))
-		return tcp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
+		return tcp_recvmsg(sk, msg, len, flags, addr_len);
 	if (!skb_queue_empty(&sk->sk_receive_queue) &&
 	    sk_psock_queue_empty(psock)) {
 		sk_psock_put(sk, psock);
-		return tcp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
+		return tcp_recvmsg(sk, msg, len, flags, addr_len);
 	}
 	lock_sock(sk);
 msg_bytes_ready:
 	copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
 	if (!copied) {
 		long timeo;
 		int data;
 
-		timeo = sock_rcvtimeo(sk, nonblock);
+		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 		data = tcp_msg_wait_data(sk, psock, timeo);
 		if (data) {
 			if (!sk_psock_queue_empty(psock))
 				goto msg_bytes_ready;
 			release_sock(sk);
 			sk_psock_put(sk, psock);
-			return tcp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
+			return tcp_recvmsg(sk, msg, len, flags, addr_len);
 		}
 		copied = -EAGAIN;
 	}
 	ret = copied;
 	release_sock(sk);
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 6b4d8361560f..ad9722cfa0f2 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -1724,20 +1724,19 @@ int udp_ioctl(struct sock *sk, int cmd, unsigned long arg)
 	return 0;
 }
 EXPORT_SYMBOL(udp_ioctl);
 
 struct sk_buff *__skb_recv_udp(struct sock *sk, unsigned int flags,
-			       int noblock, int *off, int *err)
+			       int *off, int *err)
 {
 	struct sk_buff_head *sk_queue = &sk->sk_receive_queue;
 	struct sk_buff_head *queue;
 	struct sk_buff *last;
 	long timeo;
 	int error;
 
 	queue = &udp_sk(sk)->reader_queue;
-	flags |= noblock ? MSG_DONTWAIT : 0;
 	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 	do {
 		struct sk_buff *skb;
 
 		error = sock_error(sk);
@@ -1803,11 +1802,11 @@ int udp_read_sock(struct sock *sk, read_descriptor_t *desc,
 
 	while (1) {
 		struct sk_buff *skb;
 		int err, used;
 
-		skb = skb_recv_udp(sk, 0, 1, &err);
+		skb = skb_recv_udp(sk, MSG_DONTWAIT, &err);
 		if (!skb)
 			return err;
 
 		if (udp_lib_checksum_complete(skb)) {
 			__UDP_INC_STATS(sock_net(sk), UDP_MIB_CSUMERRORS,
@@ -1841,11 +1840,11 @@ EXPORT_SYMBOL(udp_read_sock);
 /*
  * 	This should be easy, if there is something there we
  * 	return it, otherwise we block.
  */
 
-int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
+int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		int flags, int *addr_len)
 {
 	struct inet_sock *inet = inet_sk(sk);
 	DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);
 	struct sk_buff *skb;
@@ -1857,11 +1856,11 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
 	if (flags & MSG_ERRQUEUE)
 		return ip_recv_error(sk, msg, len, addr_len);
 
 try_again:
 	off = sk_peek_offset(sk, flags);
-	skb = __skb_recv_udp(sk, flags, noblock, &off, &err);
+	skb = __skb_recv_udp(sk, flags, &off, &err);
 	if (!skb)
 		return err;
 
 	ulen = udp_skb_len(skb);
 	copied = len;
diff --git a/net/ipv4/udp_bpf.c b/net/ipv4/udp_bpf.c
index bbe6569c9ad3..5da2e2ae5de5 100644
--- a/net/ipv4/udp_bpf.c
+++ b/net/ipv4/udp_bpf.c
@@ -9,18 +9,18 @@
 #include "udp_impl.h"
 
 static struct proto *udpv6_prot_saved __read_mostly;
 
 static int sk_udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-			  int noblock, int flags, int *addr_len)
+			  int flags, int *addr_len)
 {
 #if IS_ENABLED(CONFIG_IPV6)
 	if (sk->sk_family == AF_INET6)
-		return udpv6_prot_saved->recvmsg(sk, msg, len, noblock, flags,
+		return udpv6_prot_saved->recvmsg(sk, msg, len, flags,
 						 addr_len);
 #endif
-	return udp_prot.recvmsg(sk, msg, len, noblock, flags, addr_len);
+	return udp_prot.recvmsg(sk, msg, len, flags, addr_len);
 }
 
 static bool udp_sk_has_data(struct sock *sk)
 {
 	return !skb_queue_empty(&udp_sk(sk)->reader_queue) ||
@@ -59,39 +59,39 @@ static int udp_msg_wait_data(struct sock *sk, struct sk_psock *psock,
 	remove_wait_queue(sk_sleep(sk), &wait);
 	return ret;
 }
 
 static int udp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-			   int nonblock, int flags, int *addr_len)
+			   int flags, int *addr_len)
 {
 	struct sk_psock *psock;
 	int copied, ret;
 
 	if (unlikely(flags & MSG_ERRQUEUE))
 		return inet_recv_error(sk, msg, len, addr_len);
 
 	psock = sk_psock_get(sk);
 	if (unlikely(!psock))
-		return sk_udp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
+		return sk_udp_recvmsg(sk, msg, len, flags, addr_len);
 
 	if (!psock_has_data(psock)) {
-		ret = sk_udp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
+		ret = sk_udp_recvmsg(sk, msg, len, flags, addr_len);
 		goto out;
 	}
 
 msg_bytes_ready:
 	copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
 	if (!copied) {
 		long timeo;
 		int data;
 
-		timeo = sock_rcvtimeo(sk, nonblock);
+		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 		data = udp_msg_wait_data(sk, psock, timeo);
 		if (data) {
 			if (psock_has_data(psock))
 				goto msg_bytes_ready;
-			ret = sk_udp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
+			ret = sk_udp_recvmsg(sk, msg, len, flags, addr_len);
 			goto out;
 		}
 		copied = -EAGAIN;
 	}
 	ret = copied;
diff --git a/net/ipv4/udp_impl.h b/net/ipv4/udp_impl.h
index 2878d8285caf..a6574ac08472 100644
--- a/net/ipv4/udp_impl.h
+++ b/net/ipv4/udp_impl.h
@@ -15,11 +15,11 @@ void udp_v4_rehash(struct sock *sk);
 int udp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
 		   unsigned int optlen);
 int udp_getsockopt(struct sock *sk, int level, int optname,
 		   char __user *optval, int __user *optlen);
 
-int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
+int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		int flags, int *addr_len);
 int udp_sendpage(struct sock *sk, struct page *page, int offset, size_t size,
 		 int flags);
 void udp_destroy_sock(struct sock *sk);
 
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 7d7b7523d126..6595a78672c8 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -652,11 +652,11 @@ int inet6_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
 	return INDIRECT_CALL_2(prot->sendmsg, tcp_sendmsg, udpv6_sendmsg,
 			       sk, msg, size);
 }
 
 INDIRECT_CALLABLE_DECLARE(int udpv6_recvmsg(struct sock *, struct msghdr *,
-					    size_t, int, int, int *));
+					    size_t, int, int *));
 int inet6_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
 		  int flags)
 {
 	struct sock *sk = sock->sk;
 	const struct proto *prot;
@@ -667,12 +667,11 @@ int inet6_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
 		sock_rps_record_flow(sk);
 
 	/* IPV6_ADDRFORM can change sk->sk_prot under us. */
 	prot = READ_ONCE(sk->sk_prot);
 	err = INDIRECT_CALL_2(prot->recvmsg, tcp_recvmsg, udpv6_recvmsg,
-			      sk, msg, size, flags & MSG_DONTWAIT,
-			      flags & ~MSG_DONTWAIT, &addr_len);
+			      sk, msg, size, flags, &addr_len);
 	if (err >= 0)
 		msg->msg_namelen = addr_len;
 	return err;
 }
 
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index 8bb41f3b246a..0d7c13d33d1a 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -458,11 +458,11 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
  *	This should be easy, if there is something there
  *	we return it, otherwise we block.
  */
 
 static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-			 int noblock, int flags, int *addr_len)
+			 int flags, int *addr_len)
 {
 	struct ipv6_pinfo *np = inet6_sk(sk);
 	DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, msg->msg_name);
 	struct sk_buff *skb;
 	size_t copied;
@@ -475,11 +475,10 @@ static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		return ipv6_recv_error(sk, msg, len, addr_len);
 
 	if (np->rxpmtu && np->rxopt.bits.rxpmtu)
 		return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
 
-	flags |= (noblock ? MSG_DONTWAIT : 0);
 	skb = skb_recv_datagram(sk, flags, &err);
 	if (!skb)
 		goto out;
 
 	copied = skb->len;
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 7f0fa9bd9ffe..db9449b52dbe 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -320,11 +320,11 @@ static int udp6_skb_len(struct sk_buff *skb)
  *	This should be easy, if there is something there we
  *	return it, otherwise we block.
  */
 
 int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-		  int noblock, int flags, int *addr_len)
+		  int flags, int *addr_len)
 {
 	struct ipv6_pinfo *np = inet6_sk(sk);
 	struct inet_sock *inet = inet_sk(sk);
 	struct sk_buff *skb;
 	unsigned int ulen, copied;
@@ -340,11 +340,11 @@ int udpv6_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);
 
 try_again:
 	off = sk_peek_offset(sk, flags);
-	skb = __skb_recv_udp(sk, flags, noblock, &off, &err);
+	skb = __skb_recv_udp(sk, flags, &off, &err);
 	if (!skb)
 		return err;
 
 	ulen = udp6_skb_len(skb);
 	copied = len;
diff --git a/net/ipv6/udp_impl.h b/net/ipv6/udp_impl.h
index b2fcc46c1630..1cd65d03c257 100644
--- a/net/ipv6/udp_impl.h
+++ b/net/ipv6/udp_impl.h
@@ -18,11 +18,11 @@ void udp_v6_rehash(struct sock *sk);
 int udpv6_getsockopt(struct sock *sk, int level, int optname,
 		     char __user *optval, int __user *optlen);
 int udpv6_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
 		     unsigned int optlen);
 int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len);
-int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
+int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		  int flags, int *addr_len);
 void udpv6_destroy_sock(struct sock *sk);
 
 #ifdef CONFIG_PROC_FS
 int udp6_seq_show(struct seq_file *seq, void *v);
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
index c6a5cc2d88e7..6af09e188e52 100644
--- a/net/l2tp/l2tp_ip.c
+++ b/net/l2tp/l2tp_ip.c
@@ -513,22 +513,21 @@ static int l2tp_ip_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 	rc = -EHOSTUNREACH;
 	goto out;
 }
 
 static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg,
-			   size_t len, int noblock, int flags, int *addr_len)
+			   size_t len, int flags, int *addr_len)
 {
 	struct inet_sock *inet = inet_sk(sk);
 	size_t copied = 0;
 	int err = -EOPNOTSUPP;
 	DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);
 	struct sk_buff *skb;
 
 	if (flags & MSG_OOB)
 		goto out;
 
-	flags |= (noblock ? MSG_DONTWAIT : 0);
 	skb = skb_recv_datagram(sk, flags, &err);
 	if (!skb)
 		goto out;
 
 	copied = skb->len;
diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
index 97fde8a9209b..217c7192691e 100644
--- a/net/l2tp/l2tp_ip6.c
+++ b/net/l2tp/l2tp_ip6.c
@@ -655,11 +655,11 @@ static int l2tp_ip6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 	err = 0;
 	goto done;
 }
 
 static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-			    int noblock, int flags, int *addr_len)
+			    int flags, int *addr_len)
 {
 	struct ipv6_pinfo *np = inet6_sk(sk);
 	DECLARE_SOCKADDR(struct sockaddr_l2tpip6 *, lsa, msg->msg_name);
 	size_t copied = 0;
 	int err = -EOPNOTSUPP;
@@ -669,11 +669,10 @@ static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		goto out;
 
 	if (flags & MSG_ERRQUEUE)
 		return ipv6_recv_error(sk, msg, len, addr_len);
 
-	flags |= (noblock ? MSG_DONTWAIT : 0);
 	skb = skb_recv_datagram(sk, flags, &err);
 	if (!skb)
 		goto out;
 
 	copied = skb->len;
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 0cbea3b6d0a4..56baeae0b960 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2010,11 +2010,11 @@ static unsigned int mptcp_inq_hint(const struct sock *sk)
 
 	return 0;
 }
 
 static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-			 int nonblock, int flags, int *addr_len)
+			 int flags, int *addr_len)
 {
 	struct mptcp_sock *msk = mptcp_sk(sk);
 	struct scm_timestamping_internal tss;
 	int copied = 0, cmsg_flags = 0;
 	int target;
@@ -2028,11 +2028,11 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 	if (unlikely(sk->sk_state == TCP_LISTEN)) {
 		copied = -ENOTCONN;
 		goto out_err;
 	}
 
-	timeo = sock_rcvtimeo(sk, nonblock);
+	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 
 	len = min_t(size_t, len, INT_MAX);
 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
 
 	if (unlikely(msk->recvmsg_inq))
diff --git a/net/phonet/datagram.c b/net/phonet/datagram.c
index 3f2e62b63dd4..ff5f49ab236e 100644
--- a/net/phonet/datagram.c
+++ b/net/phonet/datagram.c
@@ -110,22 +110,21 @@ static int pn_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 	/* If ok, return len. */
 	return (err >= 0) ? len : err;
 }
 
 static int pn_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-		      int noblock, int flags, int *addr_len)
+		      int flags, int *addr_len)
 {
 	struct sk_buff *skb = NULL;
 	struct sockaddr_pn sa;
 	int rval = -EOPNOTSUPP;
 	int copylen;
 
 	if (flags & ~(MSG_PEEK|MSG_TRUNC|MSG_DONTWAIT|MSG_NOSIGNAL|
 			MSG_CMSG_COMPAT))
 		goto out_nofree;
 
-	flags |= (noblock ? MSG_DONTWAIT : 0);
 	skb = skb_recv_datagram(sk, flags, &rval);
 	if (skb == NULL)
 		goto out_nofree;
 
 	pn_skb_get_src_sockaddr(skb, &sa);
diff --git a/net/phonet/pep.c b/net/phonet/pep.c
index 441a26706592..83ea13a50690 100644
--- a/net/phonet/pep.c
+++ b/net/phonet/pep.c
@@ -1237,11 +1237,11 @@ struct sk_buff *pep_read(struct sock *sk)
 		pipe_grant_credits(sk, GFP_ATOMIC);
 	return skb;
 }
 
 static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-		       int noblock, int flags, int *addr_len)
+		       int flags, int *addr_len)
 {
 	struct sk_buff *skb;
 	int err;
 
 	if (flags & ~(MSG_OOB|MSG_PEEK|MSG_TRUNC|MSG_DONTWAIT|MSG_WAITALL|
@@ -1266,11 +1266,10 @@ static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 		}
 		if (flags & MSG_OOB)
 			return -EINVAL;
 	}
 
-	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)
 			err = -ECONNRESET;
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index 2e8a896af81a..17c4e236ec8b 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -1720,11 +1720,10 @@ static int process_rx_list(struct tls_sw_context_rx *ctx,
 }
 
 int tls_sw_recvmsg(struct sock *sk,
 		   struct msghdr *msg,
 		   size_t len,
-		   int nonblock,
 		   int flags,
 		   int *addr_len)
 {
 	struct tls_context *tls_ctx = tls_get_ctx(sk);
 	struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx);
@@ -1742,12 +1741,10 @@ int tls_sw_recvmsg(struct sock *sk,
 	bool is_kvec = iov_iter_is_kvec(&msg->msg_iter);
 	bool is_peek = flags & MSG_PEEK;
 	bool bpf_strp_enabled;
 	bool zc_capable;
 
-	flags |= nonblock;
-
 	if (unlikely(flags & MSG_ERRQUEUE))
 		return sock_recv_errqueue(sk, msg, len, SOL_IP, IP_RECVERR);
 
 	psock = sk_psock_get(sk);
 	lock_sock(sk);
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index fecbd95da918..e1dd9e9c8452 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -2482,12 +2482,11 @@ static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg, size_t si
 
 #ifdef CONFIG_BPF_SYSCALL
 	const struct proto *prot = READ_ONCE(sk->sk_prot);
 
 	if (prot != &unix_dgram_proto)
-		return prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
-					    flags & ~MSG_DONTWAIT, NULL);
+		return prot->recvmsg(sk, msg, size, flags, NULL);
 #endif
 	return __unix_dgram_recvmsg(sk, msg, size, flags);
 }
 
 static int unix_read_sock(struct sock *sk, read_descriptor_t *desc,
@@ -2915,12 +2914,11 @@ static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg,
 #ifdef CONFIG_BPF_SYSCALL
 	struct sock *sk = sock->sk;
 	const struct proto *prot = READ_ONCE(sk->sk_prot);
 
 	if (prot != &unix_stream_proto)
-		return prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
-					    flags & ~MSG_DONTWAIT, NULL);
+		return prot->recvmsg(sk, msg, size, flags, NULL);
 #endif
 	return unix_stream_read_generic(&state, true);
 }
 
 static int unix_stream_splice_actor(struct sk_buff *skb,
diff --git a/net/unix/unix_bpf.c b/net/unix/unix_bpf.c
index 452376c6f419..7cf14c6b1725 100644
--- a/net/unix/unix_bpf.c
+++ b/net/unix/unix_bpf.c
@@ -46,12 +46,11 @@ static int __unix_recvmsg(struct sock *sk, struct msghdr *msg,
 	else
 		return __unix_stream_recvmsg(sk, msg, len, flags);
 }
 
 static int unix_bpf_recvmsg(struct sock *sk, struct msghdr *msg,
-			    size_t len, int nonblock, int flags,
-			    int *addr_len)
+			    size_t len, int flags, int *addr_len)
 {
 	struct unix_sock *u = unix_sk(sk);
 	struct sk_psock *psock;
 	int copied;
 
@@ -71,11 +70,11 @@ static int unix_bpf_recvmsg(struct sock *sk, struct msghdr *msg,
 	copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
 	if (!copied) {
 		long timeo;
 		int data;
 
-		timeo = sock_rcvtimeo(sk, nonblock);
+		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 		data = unix_msg_wait_data(sk, psock, timeo);
 		if (data) {
 			if (!sk_psock_queue_empty(psock))
 				goto msg_bytes_ready;
 			mutex_unlock(&u->iolock);
diff --git a/net/xfrm/espintcp.c b/net/xfrm/espintcp.c
index 1f08ebf7d80c..82d14eea1b5a 100644
--- a/net/xfrm/espintcp.c
+++ b/net/xfrm/espintcp.c
@@ -129,20 +129,18 @@ static int espintcp_parse(struct strparser *strp, struct sk_buff *skb)
 
 	return len;
 }
 
 static int espintcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-			    int nonblock, int flags, int *addr_len)
+			    int flags, int *addr_len)
 {
 	struct espintcp_ctx *ctx = espintcp_getctx(sk);
 	struct sk_buff *skb;
 	int err = 0;
 	int copied;
 	int off = 0;
 
-	flags |= nonblock ? MSG_DONTWAIT : 0;
-
 	skb = __skb_recv_datagram(sk, &ctx->ike_queue, flags, &off, &err);
 	if (!skb) {
 		if (err == -EAGAIN && sk->sk_shutdown & RCV_SHUTDOWN)
 			return 0;
 		return err;
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next v2] net: remove noblock parameter from recvmsg() entities
  2022-04-10 20:06 [PATCH net-next v2] net: remove noblock parameter from recvmsg() entities Oliver Hartkopp
@ 2022-04-10 20:34 ` Oliver Hartkopp
  2022-04-10 23:13 ` kernel test robot
  1 sibling, 0 replies; 3+ messages in thread
From: Oliver Hartkopp @ 2022-04-10 20:34 UTC (permalink / raw)
  To: netdev, kuba, davem

Ah, there are still some missing bits as I tried to omit using 
allmodconfig due to my relatively slow machine.

Will send a v3 then.  Sorry for the noise :-/

BR
Oliver

On 10.04.22 22:06, Oliver Hartkopp wrote:
> The internal recvmsg() functions have two parameters 'flags' and 'noblock'
> that were merged inside skb_recv_datagram(). As a follow up patch to commit
> f4b41f062c42 ("net: remove noblock parameter from skb_recv_datagram()")
> this patch removes the separate 'noblock' parameter for recvmsg().
> 
> Analogue to the referenced patch for skb_recv_datagram() the 'flags' and
> 'noblock' parameters are unnecessarily split up with e.g.
> 
> err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
>                             flags & ~MSG_DONTWAIT, &addr_len);
> 
> or in
> 
> err = INDIRECT_CALL_2(sk->sk_prot->recvmsg, tcp_recvmsg, udp_recvmsg,
>                        sk, msg, size, flags & MSG_DONTWAIT,
>                        flags & ~MSG_DONTWAIT, &addr_len);
> 
> instead of simply using only 'flags' all the time and check for MSG_DONTWAIT
> flags where needed to check for the former separated no(n)block condition.
> 
> Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
> ---
>   .../chelsio/inline_crypto/chtls/chtls.h       |  2 +-
>   .../chelsio/inline_crypto/chtls/chtls_io.c    | 20 +++++++++----------
>   include/net/ping.h                            |  2 +-
>   include/net/sock.h                            |  3 +--
>   include/net/tcp.h                             |  2 +-
>   include/net/tls.h                             |  2 +-
>   include/net/udp.h                             |  6 +++---
>   net/core/sock.c                               |  3 +--
>   net/ieee802154/socket.c                       |  6 ++----
>   net/ipv4/af_inet.c                            |  5 ++---
>   net/ipv4/ping.c                               |  3 +--
>   net/ipv4/raw.c                                |  3 +--
>   net/ipv4/tcp.c                                | 14 ++++++-------
>   net/ipv4/tcp_bpf.c                            | 15 +++++++-------
>   net/ipv4/udp.c                                |  9 ++++-----
>   net/ipv4/udp_bpf.c                            | 16 +++++++--------
>   net/ipv4/udp_impl.h                           |  2 +-
>   net/ipv6/af_inet6.c                           |  5 ++---
>   net/ipv6/raw.c                                |  3 +--
>   net/ipv6/udp.c                                |  4 ++--
>   net/ipv6/udp_impl.h                           |  2 +-
>   net/l2tp/l2tp_ip.c                            |  3 +--
>   net/l2tp/l2tp_ip6.c                           |  3 +--
>   net/mptcp/protocol.c                          |  4 ++--
>   net/phonet/datagram.c                         |  3 +--
>   net/phonet/pep.c                              |  3 +--
>   net/tls/tls_sw.c                              |  3 ---
>   net/unix/af_unix.c                            |  6 ++----
>   net/unix/unix_bpf.c                           |  5 ++---
>   net/xfrm/espintcp.c                           |  4 +---
>   30 files changed, 69 insertions(+), 92 deletions(-)
> 
> diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
> index 9e2378013642..41714203ace8 100644
> --- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
> +++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
> @@ -565,11 +565,11 @@ void chtls_close(struct sock *sk, long timeout);
>   int chtls_disconnect(struct sock *sk, int flags);
>   void chtls_shutdown(struct sock *sk, int how);
>   void chtls_destroy_sock(struct sock *sk);
>   int chtls_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);
>   int chtls_recvmsg(struct sock *sk, struct msghdr *msg,
> -		  size_t len, int nonblock, int flags, int *addr_len);
> +		  size_t len, int flags, int *addr_len);
>   int chtls_sendpage(struct sock *sk, struct page *page,
>   		   int offset, size_t size, int flags);
>   int send_tx_flowc_wr(struct sock *sk, int compl,
>   		     u32 snd_nxt, u32 rcv_nxt);
>   void chtls_tcp_push(struct sock *sk, int flags);
> diff --git a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c
> index c320cc8ca68d..0e7ed2d85482 100644
> --- a/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c
> +++ b/drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c
> @@ -1424,11 +1424,11 @@ static void chtls_cleanup_rbuf(struct sock *sk, int copied)
>   	if (must_send || credits >= thres)
>   		tp->rcv_wup += send_rx_credits(csk, credits);
>   }
>   
>   static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -			    int nonblock, int flags, int *addr_len)
> +			    int flags, int *addr_len)
>   {
>   	struct chtls_sock *csk = rcu_dereference_sk_user_data(sk);
>   	struct chtls_hws *hws = &csk->tlshws;
>   	struct net_device *dev = csk->egress_dev;
>   	struct adapter *adap = netdev2adap(dev);
> @@ -1439,11 +1439,11 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   	int target;
>   	long timeo;
>   
>   	buffers_freed = 0;
>   
> -	timeo = sock_rcvtimeo(sk, nonblock);
> +	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   	target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
>   
>   	if (unlikely(csk_flag(sk, CSK_UPDATE_RCV_WND)))
>   		chtls_cleanup_rbuf(sk, copied);
>   
> @@ -1614,21 +1614,21 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   
>   /*
>    * Peek at data in a socket's receive buffer.
>    */
>   static int peekmsg(struct sock *sk, struct msghdr *msg,
> -		   size_t len, int nonblock, int flags)
> +		   size_t len, int flags)
>   {
>   	struct tcp_sock *tp = tcp_sk(sk);
>   	u32 peek_seq, offset;
>   	struct sk_buff *skb;
>   	int copied = 0;
>   	size_t avail;          /* amount of available data in current skb */
>   	long timeo;
>   
>   	lock_sock(sk);
> -	timeo = sock_rcvtimeo(sk, nonblock);
> +	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   	peek_seq = tp->copied_seq;
>   
>   	do {
>   		if (unlikely(tp->urg_data && tp->urg_seq == peek_seq)) {
>   			if (copied)
> @@ -1735,11 +1735,11 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,
>   	release_sock(sk);
>   	return copied;
>   }
>   
>   int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -		  int nonblock, int flags, int *addr_len)
> +		  int flags, int *addr_len)
>   {
>   	struct tcp_sock *tp = tcp_sk(sk);
>   	struct chtls_sock *csk;
>   	unsigned long avail;    /* amount of available data in current skb */
>   	int buffers_freed;
> @@ -1748,29 +1748,29 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   	int target;             /* Read at least this many bytes */
>   
>   	buffers_freed = 0;
>   
>   	if (unlikely(flags & MSG_OOB))
> -		return tcp_prot.recvmsg(sk, msg, len, nonblock, flags,
> +		return tcp_prot.recvmsg(sk, msg, len, flags,
>   					addr_len);
>   
>   	if (unlikely(flags & MSG_PEEK))
> -		return peekmsg(sk, msg, len, nonblock, flags);
> +		return peekmsg(sk, msg, len, flags);
>   
>   	if (sk_can_busy_loop(sk) &&
>   	    skb_queue_empty_lockless(&sk->sk_receive_queue) &&
>   	    sk->sk_state == TCP_ESTABLISHED)
> -		sk_busy_loop(sk, nonblock);
> +		sk_busy_loop(sk, flags & MSG_DONTWAIT);
>   
>   	lock_sock(sk);
>   	csk = rcu_dereference_sk_user_data(sk);
>   
>   	if (is_tls_rx(csk))
> -		return chtls_pt_recvmsg(sk, msg, len, nonblock,
> +		return chtls_pt_recvmsg(sk, msg, len,
>   					flags, addr_len);
>   
> -	timeo = sock_rcvtimeo(sk, nonblock);
> +	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   	target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
>   
>   	if (unlikely(csk_flag(sk, CSK_UPDATE_RCV_WND)))
>   		chtls_cleanup_rbuf(sk, copied);
>   
> diff --git a/include/net/ping.h b/include/net/ping.h
> index 2fe78874318c..a873c1ac7368 100644
> --- a/include/net/ping.h
> +++ b/include/net/ping.h
> @@ -69,11 +69,11 @@ void ping_close(struct sock *sk, long timeout);
>   int  ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len);
>   void ping_err(struct sk_buff *skb, int offset, u32 info);
>   int  ping_getfrag(void *from, char *to, int offset, int fraglen, int odd,
>   		  struct sk_buff *);
>   
> -int  ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
> +int  ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		  int flags, int *addr_len);
>   int  ping_common_sendmsg(int family, struct msghdr *msg, size_t len,
>   			 void *user_icmph, size_t icmph_len);
>   int  ping_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
>   bool ping_rcv(struct sk_buff *skb);
> diff --git a/include/net/sock.h b/include/net/sock.h
> index c4b91fc19b9c..e6564d238d0e 100644
> --- a/include/net/sock.h
> +++ b/include/net/sock.h
> @@ -1200,12 +1200,11 @@ struct proto {
>   					unsigned int cmd, unsigned long arg);
>   #endif
>   	int			(*sendmsg)(struct sock *sk, struct msghdr *msg,
>   					   size_t len);
>   	int			(*recvmsg)(struct sock *sk, struct msghdr *msg,
> -					   size_t len, int noblock, int flags,
> -					   int *addr_len);
> +					   size_t len, int flags, int *addr_len);
>   	int			(*sendpage)(struct sock *sk, struct page *page,
>   					int offset, size_t size, int flags);
>   	int			(*bind)(struct sock *sk,
>   					struct sockaddr *addr, int addr_len);
>   	int			(*bind_add)(struct sock *sk,
> diff --git a/include/net/tcp.h b/include/net/tcp.h
> index 6d50a662bf89..679b1964d494 100644
> --- a/include/net/tcp.h
> +++ b/include/net/tcp.h
> @@ -405,11 +405,11 @@ int tcp_getsockopt(struct sock *sk, int level, int optname,
>   bool tcp_bpf_bypass_getsockopt(int level, int optname);
>   int tcp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
>   		   unsigned int optlen);
>   void tcp_set_keepalive(struct sock *sk, int val);
>   void tcp_syn_ack_timeout(const struct request_sock *req);
> -int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
> +int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		int flags, int *addr_len);
>   int tcp_set_rcvlowat(struct sock *sk, int val);
>   int tcp_set_window_clamp(struct sock *sk, int val);
>   void tcp_update_recv_tstamps(struct sk_buff *skb,
>   			     struct scm_timestamping_internal *tss);
> diff --git a/include/net/tls.h b/include/net/tls.h
> index 6fe78361c8c8..b59f0a63292b 100644
> --- a/include/net/tls.h
> +++ b/include/net/tls.h
> @@ -369,11 +369,11 @@ void tls_sw_release_resources_tx(struct sock *sk);
>   void tls_sw_free_ctx_tx(struct tls_context *tls_ctx);
>   void tls_sw_free_resources_rx(struct sock *sk);
>   void tls_sw_release_resources_rx(struct sock *sk);
>   void tls_sw_free_ctx_rx(struct tls_context *tls_ctx);
>   int tls_sw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -		   int nonblock, int flags, int *addr_len);
> +		   int flags, int *addr_len);
>   bool tls_sw_sock_is_readable(struct sock *sk);
>   ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,
>   			   struct pipe_inode_info *pipe,
>   			   size_t len, unsigned int flags);
>   
> diff --git a/include/net/udp.h b/include/net/udp.h
> index f1c2a88c9005..c2dfe95f4da5 100644
> --- a/include/net/udp.h
> +++ b/include/net/udp.h
> @@ -249,17 +249,17 @@ static inline bool udp_sk_bound_dev_eq(struct net *net, int bound_dev_if,
>   void udp_destruct_sock(struct sock *sk);
>   void skb_consume_udp(struct sock *sk, struct sk_buff *skb, int len);
>   int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb);
>   void udp_skb_destructor(struct sock *sk, struct sk_buff *skb);
>   struct sk_buff *__skb_recv_udp(struct sock *sk, unsigned int flags,
> -			       int noblock, int *off, int *err);
> +			       int *off, int *err);
>   static inline struct sk_buff *skb_recv_udp(struct sock *sk, unsigned int flags,
> -					   int noblock, int *err)
> +					   int *err)
>   {
>   	int off = 0;
>   
> -	return __skb_recv_udp(sk, flags, noblock, &off, err);
> +	return __skb_recv_udp(sk, flags, &off, err);
>   }
>   
>   int udp_v4_early_demux(struct sk_buff *skb);
>   bool udp_sk_rx_dst_set(struct sock *sk, struct dst_entry *dst);
>   int udp_get_port(struct sock *sk, unsigned short snum,
> diff --git a/net/core/sock.c b/net/core/sock.c
> index 7000403eaeb2..60f5ceca36f9 100644
> --- a/net/core/sock.c
> +++ b/net/core/sock.c
> @@ -3486,12 +3486,11 @@ int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   {
>   	struct sock *sk = sock->sk;
>   	int addr_len = 0;
>   	int err;
>   
> -	err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
> -				   flags & ~MSG_DONTWAIT, &addr_len);
> +	err = sk->sk_prot->recvmsg(sk, msg, size, flags, &addr_len);
>   	if (err >= 0)
>   		msg->msg_namelen = addr_len;
>   	return err;
>   }
>   EXPORT_SYMBOL(sock_common_recvmsg);
> diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c
> index a725dd9bbda8..f24852814fa3 100644
> --- a/net/ieee802154/socket.c
> +++ b/net/ieee802154/socket.c
> @@ -306,17 +306,16 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
>   out:
>   	return err;
>   }
>   
>   static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -		       int noblock, int flags, int *addr_len)
> +		       int flags, int *addr_len)
>   {
>   	size_t copied = 0;
>   	int err = -EOPNOTSUPP;
>   	struct sk_buff *skb;
>   
> -	flags |= (noblock ? MSG_DONTWAIT : 0);
>   	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
>   	copied = skb->len;
> @@ -694,19 +693,18 @@ static int dgram_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
>   out:
>   	return err;
>   }
>   
>   static int dgram_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -			 int noblock, int flags, int *addr_len)
> +			 int flags, int *addr_len)
>   {
>   	size_t copied = 0;
>   	int err = -EOPNOTSUPP;
>   	struct sk_buff *skb;
>   	struct dgram_sock *ro = dgram_sk(sk);
>   	DECLARE_SOCKADDR(struct sockaddr_ieee802154 *, saddr, msg->msg_name);
>   
> -	flags |= (noblock ? MSG_DONTWAIT : 0);
>   	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
>   	copied = skb->len;
> diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
> index 72fde2888ad2..195ecfa2f000 100644
> --- a/net/ipv4/af_inet.c
> +++ b/net/ipv4/af_inet.c
> @@ -834,11 +834,11 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
>   	return sock_no_sendpage(sock, page, offset, size, flags);
>   }
>   EXPORT_SYMBOL(inet_sendpage);
>   
>   INDIRECT_CALLABLE_DECLARE(int udp_recvmsg(struct sock *, struct msghdr *,
> -					  size_t, int, int, int *));
> +					  size_t, int, int *));
>   int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   		 int flags)
>   {
>   	struct sock *sk = sock->sk;
>   	int addr_len = 0;
> @@ -846,12 +846,11 @@ int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   
>   	if (likely(!(flags & MSG_ERRQUEUE)))
>   		sock_rps_record_flow(sk);
>   
>   	err = INDIRECT_CALL_2(sk->sk_prot->recvmsg, tcp_recvmsg, udp_recvmsg,
> -			      sk, msg, size, flags & MSG_DONTWAIT,
> -			      flags & ~MSG_DONTWAIT, &addr_len);
> +			      sk, msg, size, flags, &addr_len);
>   	if (err >= 0)
>   		msg->msg_namelen = addr_len;
>   	return err;
>   }
>   EXPORT_SYMBOL(inet_recvmsg);
> diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
> index 550dc5c795c0..64a5f02426ed 100644
> --- a/net/ipv4/ping.c
> +++ b/net/ipv4/ping.c
> @@ -842,11 +842,11 @@ static int ping_v4_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
>   		goto back_from_confirm;
>   	err = 0;
>   	goto out;
>   }
>   
> -int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
> +int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		 int flags, int *addr_len)
>   {
>   	struct inet_sock *isk = inet_sk(sk);
>   	int family = sk->sk_family;
>   	struct sk_buff *skb;
> @@ -859,11 +859,10 @@ int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
>   		goto out;
>   
>   	if (flags & MSG_ERRQUEUE)
>   		return inet_recv_error(sk, msg, len, addr_len);
>   
> -	flags |= (noblock ? MSG_DONTWAIT : 0);
>   	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
>   	copied = skb->len;
> diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
> index c9dd9603f2e7..4056b0da85ea 100644
> --- a/net/ipv4/raw.c
> +++ b/net/ipv4/raw.c
> @@ -751,11 +751,11 @@ static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
>    *	This should be easy, if there is something there
>    *	we return it, otherwise we block.
>    */
>   
>   static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -		       int noblock, int flags, int *addr_len)
> +		       int flags, int *addr_len)
>   {
>   	struct inet_sock *inet = inet_sk(sk);
>   	size_t copied = 0;
>   	int err = -EOPNOTSUPP;
>   	DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);
> @@ -767,11 +767,10 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   	if (flags & MSG_ERRQUEUE) {
>   		err = ip_recv_error(sk, msg, len, addr_len);
>   		goto out;
>   	}
>   
> -	flags |= (noblock ? MSG_DONTWAIT : 0);
>   	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
>   	copied = skb->len;
> diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
> index e31cf137c614..1e003a3dd678 100644
> --- a/net/ipv4/tcp.c
> +++ b/net/ipv4/tcp.c
> @@ -1875,11 +1875,11 @@ static void tcp_zerocopy_set_hint_for_skb(struct sock *sk,
>   	mappable_offset = find_next_mappable_frag(frag, zc->recv_skip_hint);
>   	zc->recv_skip_hint = mappable_offset + partial_frag_remainder;
>   }
>   
>   static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
> -			      int nonblock, int flags,
> +			      int flags,
>   			      struct scm_timestamping_internal *tss,
>   			      int *cmsg_flags);
>   static int receive_fallback_to_copy(struct sock *sk,
>   				    struct tcp_zerocopy_receive *zc, int inq,
>   				    struct scm_timestamping_internal *tss)
> @@ -1898,11 +1898,11 @@ static int receive_fallback_to_copy(struct sock *sk,
>   	err = import_single_range(READ, (void __user *)copy_address,
>   				  inq, &iov, &msg.msg_iter);
>   	if (err)
>   		return err;
>   
> -	err = tcp_recvmsg_locked(sk, &msg, inq, /*nonblock=*/1, /*flags=*/0,
> +	err = tcp_recvmsg_locked(sk, &msg, inq, MSG_DONTWAIT,
>   				 tss, &zc->msg_flags);
>   	if (err < 0)
>   		return err;
>   
>   	zc->copybuf_len = err;
> @@ -2314,11 +2314,11 @@ static int tcp_inq_hint(struct sock *sk)
>    *	tricks with *seq access order and skb->users are not required.
>    *	Probably, code can be easily improved even more.
>    */
>   
>   static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
> -			      int nonblock, int flags,
> +			      int flags,
>   			      struct scm_timestamping_internal *tss,
>   			      int *cmsg_flags)
>   {
>   	struct tcp_sock *tp = tcp_sk(sk);
>   	int copied = 0;
> @@ -2335,11 +2335,11 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
>   	if (sk->sk_state == TCP_LISTEN)
>   		goto out;
>   
>   	if (tp->recvmsg_inq)
>   		*cmsg_flags = TCP_CMSG_INQ;
> -	timeo = sock_rcvtimeo(sk, nonblock);
> +	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   
>   	/* Urgent data needs to be handled specially. */
>   	if (flags & MSG_OOB)
>   		goto recv_urg;
>   
> @@ -2554,11 +2554,11 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
>   recv_sndq:
>   	err = tcp_peek_sndq(sk, msg, len);
>   	goto out;
>   }
>   
> -int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
> +int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		int flags, int *addr_len)
>   {
>   	int cmsg_flags = 0, ret, inq;
>   	struct scm_timestamping_internal tss;
>   
> @@ -2566,14 +2566,14 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
>   		return inet_recv_error(sk, msg, len, addr_len);
>   
>   	if (sk_can_busy_loop(sk) &&
>   	    skb_queue_empty_lockless(&sk->sk_receive_queue) &&
>   	    sk->sk_state == TCP_ESTABLISHED)
> -		sk_busy_loop(sk, nonblock);
> +		sk_busy_loop(sk, flags & MSG_DONTWAIT);
>   
>   	lock_sock(sk);
> -	ret = tcp_recvmsg_locked(sk, msg, len, nonblock, flags, &tss,
> +	ret = tcp_recvmsg_locked(sk, msg, len, flags, &tss,
>   				 &cmsg_flags);
>   	release_sock(sk);
>   	sk_defer_free_flush(sk);
>   
>   	if (cmsg_flags && ret >= 0) {
> diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c
> index 1cdcb4df0eb7..be3947e70fec 100644
> --- a/net/ipv4/tcp_bpf.c
> +++ b/net/ipv4/tcp_bpf.c
> @@ -172,11 +172,10 @@ static int tcp_msg_wait_data(struct sock *sk, struct sk_psock *psock,
>   }
>   
>   static int tcp_bpf_recvmsg_parser(struct sock *sk,
>   				  struct msghdr *msg,
>   				  size_t len,
> -				  int nonblock,
>   				  int flags,
>   				  int *addr_len)
>   {
>   	struct sk_psock *psock;
>   	int copied;
> @@ -184,11 +183,11 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,
>   	if (unlikely(flags & MSG_ERRQUEUE))
>   		return inet_recv_error(sk, msg, len, addr_len);
>   
>   	psock = sk_psock_get(sk);
>   	if (unlikely(!psock))
> -		return tcp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
> +		return tcp_recvmsg(sk, msg, len, flags, addr_len);
>   
>   	lock_sock(sk);
>   msg_bytes_ready:
>   	copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
>   	if (!copied) {
> @@ -209,11 +208,11 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,
>   		if (sk->sk_state == TCP_CLOSE) {
>   			copied = -ENOTCONN;
>   			goto out;
>   		}
>   
> -		timeo = sock_rcvtimeo(sk, nonblock);
> +		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   		if (!timeo) {
>   			copied = -EAGAIN;
>   			goto out;
>   		}
>   
> @@ -232,41 +231,41 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,
>   	sk_psock_put(sk, psock);
>   	return copied;
>   }
>   
>   static int tcp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -		    int nonblock, int flags, int *addr_len)
> +			   int flags, int *addr_len)
>   {
>   	struct sk_psock *psock;
>   	int copied, ret;
>   
>   	if (unlikely(flags & MSG_ERRQUEUE))
>   		return inet_recv_error(sk, msg, len, addr_len);
>   
>   	psock = sk_psock_get(sk);
>   	if (unlikely(!psock))
> -		return tcp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
> +		return tcp_recvmsg(sk, msg, len, flags, addr_len);
>   	if (!skb_queue_empty(&sk->sk_receive_queue) &&
>   	    sk_psock_queue_empty(psock)) {
>   		sk_psock_put(sk, psock);
> -		return tcp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
> +		return tcp_recvmsg(sk, msg, len, flags, addr_len);
>   	}
>   	lock_sock(sk);
>   msg_bytes_ready:
>   	copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
>   	if (!copied) {
>   		long timeo;
>   		int data;
>   
> -		timeo = sock_rcvtimeo(sk, nonblock);
> +		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   		data = tcp_msg_wait_data(sk, psock, timeo);
>   		if (data) {
>   			if (!sk_psock_queue_empty(psock))
>   				goto msg_bytes_ready;
>   			release_sock(sk);
>   			sk_psock_put(sk, psock);
> -			return tcp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
> +			return tcp_recvmsg(sk, msg, len, flags, addr_len);
>   		}
>   		copied = -EAGAIN;
>   	}
>   	ret = copied;
>   	release_sock(sk);
> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
> index 6b4d8361560f..ad9722cfa0f2 100644
> --- a/net/ipv4/udp.c
> +++ b/net/ipv4/udp.c
> @@ -1724,20 +1724,19 @@ int udp_ioctl(struct sock *sk, int cmd, unsigned long arg)
>   	return 0;
>   }
>   EXPORT_SYMBOL(udp_ioctl);
>   
>   struct sk_buff *__skb_recv_udp(struct sock *sk, unsigned int flags,
> -			       int noblock, int *off, int *err)
> +			       int *off, int *err)
>   {
>   	struct sk_buff_head *sk_queue = &sk->sk_receive_queue;
>   	struct sk_buff_head *queue;
>   	struct sk_buff *last;
>   	long timeo;
>   	int error;
>   
>   	queue = &udp_sk(sk)->reader_queue;
> -	flags |= noblock ? MSG_DONTWAIT : 0;
>   	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   	do {
>   		struct sk_buff *skb;
>   
>   		error = sock_error(sk);
> @@ -1803,11 +1802,11 @@ int udp_read_sock(struct sock *sk, read_descriptor_t *desc,
>   
>   	while (1) {
>   		struct sk_buff *skb;
>   		int err, used;
>   
> -		skb = skb_recv_udp(sk, 0, 1, &err);
> +		skb = skb_recv_udp(sk, MSG_DONTWAIT, &err);
>   		if (!skb)
>   			return err;
>   
>   		if (udp_lib_checksum_complete(skb)) {
>   			__UDP_INC_STATS(sock_net(sk), UDP_MIB_CSUMERRORS,
> @@ -1841,11 +1840,11 @@ EXPORT_SYMBOL(udp_read_sock);
>   /*
>    * 	This should be easy, if there is something there we
>    * 	return it, otherwise we block.
>    */
>   
> -int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
> +int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		int flags, int *addr_len)
>   {
>   	struct inet_sock *inet = inet_sk(sk);
>   	DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);
>   	struct sk_buff *skb;
> @@ -1857,11 +1856,11 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
>   	if (flags & MSG_ERRQUEUE)
>   		return ip_recv_error(sk, msg, len, addr_len);
>   
>   try_again:
>   	off = sk_peek_offset(sk, flags);
> -	skb = __skb_recv_udp(sk, flags, noblock, &off, &err);
> +	skb = __skb_recv_udp(sk, flags, &off, &err);
>   	if (!skb)
>   		return err;
>   
>   	ulen = udp_skb_len(skb);
>   	copied = len;
> diff --git a/net/ipv4/udp_bpf.c b/net/ipv4/udp_bpf.c
> index bbe6569c9ad3..5da2e2ae5de5 100644
> --- a/net/ipv4/udp_bpf.c
> +++ b/net/ipv4/udp_bpf.c
> @@ -9,18 +9,18 @@
>   #include "udp_impl.h"
>   
>   static struct proto *udpv6_prot_saved __read_mostly;
>   
>   static int sk_udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -			  int noblock, int flags, int *addr_len)
> +			  int flags, int *addr_len)
>   {
>   #if IS_ENABLED(CONFIG_IPV6)
>   	if (sk->sk_family == AF_INET6)
> -		return udpv6_prot_saved->recvmsg(sk, msg, len, noblock, flags,
> +		return udpv6_prot_saved->recvmsg(sk, msg, len, flags,
>   						 addr_len);
>   #endif
> -	return udp_prot.recvmsg(sk, msg, len, noblock, flags, addr_len);
> +	return udp_prot.recvmsg(sk, msg, len, flags, addr_len);
>   }
>   
>   static bool udp_sk_has_data(struct sock *sk)
>   {
>   	return !skb_queue_empty(&udp_sk(sk)->reader_queue) ||
> @@ -59,39 +59,39 @@ static int udp_msg_wait_data(struct sock *sk, struct sk_psock *psock,
>   	remove_wait_queue(sk_sleep(sk), &wait);
>   	return ret;
>   }
>   
>   static int udp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -			   int nonblock, int flags, int *addr_len)
> +			   int flags, int *addr_len)
>   {
>   	struct sk_psock *psock;
>   	int copied, ret;
>   
>   	if (unlikely(flags & MSG_ERRQUEUE))
>   		return inet_recv_error(sk, msg, len, addr_len);
>   
>   	psock = sk_psock_get(sk);
>   	if (unlikely(!psock))
> -		return sk_udp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
> +		return sk_udp_recvmsg(sk, msg, len, flags, addr_len);
>   
>   	if (!psock_has_data(psock)) {
> -		ret = sk_udp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
> +		ret = sk_udp_recvmsg(sk, msg, len, flags, addr_len);
>   		goto out;
>   	}
>   
>   msg_bytes_ready:
>   	copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
>   	if (!copied) {
>   		long timeo;
>   		int data;
>   
> -		timeo = sock_rcvtimeo(sk, nonblock);
> +		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   		data = udp_msg_wait_data(sk, psock, timeo);
>   		if (data) {
>   			if (psock_has_data(psock))
>   				goto msg_bytes_ready;
> -			ret = sk_udp_recvmsg(sk, msg, len, nonblock, flags, addr_len);
> +			ret = sk_udp_recvmsg(sk, msg, len, flags, addr_len);
>   			goto out;
>   		}
>   		copied = -EAGAIN;
>   	}
>   	ret = copied;
> diff --git a/net/ipv4/udp_impl.h b/net/ipv4/udp_impl.h
> index 2878d8285caf..a6574ac08472 100644
> --- a/net/ipv4/udp_impl.h
> +++ b/net/ipv4/udp_impl.h
> @@ -15,11 +15,11 @@ void udp_v4_rehash(struct sock *sk);
>   int udp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
>   		   unsigned int optlen);
>   int udp_getsockopt(struct sock *sk, int level, int optname,
>   		   char __user *optval, int __user *optlen);
>   
> -int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
> +int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		int flags, int *addr_len);
>   int udp_sendpage(struct sock *sk, struct page *page, int offset, size_t size,
>   		 int flags);
>   void udp_destroy_sock(struct sock *sk);
>   
> diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
> index 7d7b7523d126..6595a78672c8 100644
> --- a/net/ipv6/af_inet6.c
> +++ b/net/ipv6/af_inet6.c
> @@ -652,11 +652,11 @@ int inet6_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)
>   	return INDIRECT_CALL_2(prot->sendmsg, tcp_sendmsg, udpv6_sendmsg,
>   			       sk, msg, size);
>   }
>   
>   INDIRECT_CALLABLE_DECLARE(int udpv6_recvmsg(struct sock *, struct msghdr *,
> -					    size_t, int, int, int *));
> +					    size_t, int, int *));
>   int inet6_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   		  int flags)
>   {
>   	struct sock *sk = sock->sk;
>   	const struct proto *prot;
> @@ -667,12 +667,11 @@ int inet6_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   		sock_rps_record_flow(sk);
>   
>   	/* IPV6_ADDRFORM can change sk->sk_prot under us. */
>   	prot = READ_ONCE(sk->sk_prot);
>   	err = INDIRECT_CALL_2(prot->recvmsg, tcp_recvmsg, udpv6_recvmsg,
> -			      sk, msg, size, flags & MSG_DONTWAIT,
> -			      flags & ~MSG_DONTWAIT, &addr_len);
> +			      sk, msg, size, flags, &addr_len);
>   	if (err >= 0)
>   		msg->msg_namelen = addr_len;
>   	return err;
>   }
>   
> diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
> index 8bb41f3b246a..0d7c13d33d1a 100644
> --- a/net/ipv6/raw.c
> +++ b/net/ipv6/raw.c
> @@ -458,11 +458,11 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
>    *	This should be easy, if there is something there
>    *	we return it, otherwise we block.
>    */
>   
>   static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -			 int noblock, int flags, int *addr_len)
> +			 int flags, int *addr_len)
>   {
>   	struct ipv6_pinfo *np = inet6_sk(sk);
>   	DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, msg->msg_name);
>   	struct sk_buff *skb;
>   	size_t copied;
> @@ -475,11 +475,10 @@ static int rawv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		return ipv6_recv_error(sk, msg, len, addr_len);
>   
>   	if (np->rxpmtu && np->rxopt.bits.rxpmtu)
>   		return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
>   
> -	flags |= (noblock ? MSG_DONTWAIT : 0);
>   	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
>   	copied = skb->len;
> diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
> index 7f0fa9bd9ffe..db9449b52dbe 100644
> --- a/net/ipv6/udp.c
> +++ b/net/ipv6/udp.c
> @@ -320,11 +320,11 @@ static int udp6_skb_len(struct sk_buff *skb)
>    *	This should be easy, if there is something there we
>    *	return it, otherwise we block.
>    */
>   
>   int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -		  int noblock, int flags, int *addr_len)
> +		  int flags, int *addr_len)
>   {
>   	struct ipv6_pinfo *np = inet6_sk(sk);
>   	struct inet_sock *inet = inet_sk(sk);
>   	struct sk_buff *skb;
>   	unsigned int ulen, copied;
> @@ -340,11 +340,11 @@ int udpv6_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);
>   
>   try_again:
>   	off = sk_peek_offset(sk, flags);
> -	skb = __skb_recv_udp(sk, flags, noblock, &off, &err);
> +	skb = __skb_recv_udp(sk, flags, &off, &err);
>   	if (!skb)
>   		return err;
>   
>   	ulen = udp6_skb_len(skb);
>   	copied = len;
> diff --git a/net/ipv6/udp_impl.h b/net/ipv6/udp_impl.h
> index b2fcc46c1630..1cd65d03c257 100644
> --- a/net/ipv6/udp_impl.h
> +++ b/net/ipv6/udp_impl.h
> @@ -18,11 +18,11 @@ void udp_v6_rehash(struct sock *sk);
>   int udpv6_getsockopt(struct sock *sk, int level, int optname,
>   		     char __user *optval, int __user *optlen);
>   int udpv6_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
>   		     unsigned int optlen);
>   int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len);
> -int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
> +int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		  int flags, int *addr_len);
>   void udpv6_destroy_sock(struct sock *sk);
>   
>   #ifdef CONFIG_PROC_FS
>   int udp6_seq_show(struct seq_file *seq, void *v);
> diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
> index c6a5cc2d88e7..6af09e188e52 100644
> --- a/net/l2tp/l2tp_ip.c
> +++ b/net/l2tp/l2tp_ip.c
> @@ -513,22 +513,21 @@ static int l2tp_ip_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
>   	rc = -EHOSTUNREACH;
>   	goto out;
>   }
>   
>   static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg,
> -			   size_t len, int noblock, int flags, int *addr_len)
> +			   size_t len, int flags, int *addr_len)
>   {
>   	struct inet_sock *inet = inet_sk(sk);
>   	size_t copied = 0;
>   	int err = -EOPNOTSUPP;
>   	DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);
>   	struct sk_buff *skb;
>   
>   	if (flags & MSG_OOB)
>   		goto out;
>   
> -	flags |= (noblock ? MSG_DONTWAIT : 0);
>   	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
>   	copied = skb->len;
> diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
> index 97fde8a9209b..217c7192691e 100644
> --- a/net/l2tp/l2tp_ip6.c
> +++ b/net/l2tp/l2tp_ip6.c
> @@ -655,11 +655,11 @@ static int l2tp_ip6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
>   	err = 0;
>   	goto done;
>   }
>   
>   static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -			    int noblock, int flags, int *addr_len)
> +			    int flags, int *addr_len)
>   {
>   	struct ipv6_pinfo *np = inet6_sk(sk);
>   	DECLARE_SOCKADDR(struct sockaddr_l2tpip6 *, lsa, msg->msg_name);
>   	size_t copied = 0;
>   	int err = -EOPNOTSUPP;
> @@ -669,11 +669,10 @@ static int l2tp_ip6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		goto out;
>   
>   	if (flags & MSG_ERRQUEUE)
>   		return ipv6_recv_error(sk, msg, len, addr_len);
>   
> -	flags |= (noblock ? MSG_DONTWAIT : 0);
>   	skb = skb_recv_datagram(sk, flags, &err);
>   	if (!skb)
>   		goto out;
>   
>   	copied = skb->len;
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 0cbea3b6d0a4..56baeae0b960 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -2010,11 +2010,11 @@ static unsigned int mptcp_inq_hint(const struct sock *sk)
>   
>   	return 0;
>   }
>   
>   static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -			 int nonblock, int flags, int *addr_len)
> +			 int flags, int *addr_len)
>   {
>   	struct mptcp_sock *msk = mptcp_sk(sk);
>   	struct scm_timestamping_internal tss;
>   	int copied = 0, cmsg_flags = 0;
>   	int target;
> @@ -2028,11 +2028,11 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   	if (unlikely(sk->sk_state == TCP_LISTEN)) {
>   		copied = -ENOTCONN;
>   		goto out_err;
>   	}
>   
> -	timeo = sock_rcvtimeo(sk, nonblock);
> +	timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   
>   	len = min_t(size_t, len, INT_MAX);
>   	target = sock_rcvlowat(sk, flags & MSG_WAITALL, len);
>   
>   	if (unlikely(msk->recvmsg_inq))
> diff --git a/net/phonet/datagram.c b/net/phonet/datagram.c
> index 3f2e62b63dd4..ff5f49ab236e 100644
> --- a/net/phonet/datagram.c
> +++ b/net/phonet/datagram.c
> @@ -110,22 +110,21 @@ static int pn_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
>   	/* If ok, return len. */
>   	return (err >= 0) ? len : err;
>   }
>   
>   static int pn_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -		      int noblock, int flags, int *addr_len)
> +		      int flags, int *addr_len)
>   {
>   	struct sk_buff *skb = NULL;
>   	struct sockaddr_pn sa;
>   	int rval = -EOPNOTSUPP;
>   	int copylen;
>   
>   	if (flags & ~(MSG_PEEK|MSG_TRUNC|MSG_DONTWAIT|MSG_NOSIGNAL|
>   			MSG_CMSG_COMPAT))
>   		goto out_nofree;
>   
> -	flags |= (noblock ? MSG_DONTWAIT : 0);
>   	skb = skb_recv_datagram(sk, flags, &rval);
>   	if (skb == NULL)
>   		goto out_nofree;
>   
>   	pn_skb_get_src_sockaddr(skb, &sa);
> diff --git a/net/phonet/pep.c b/net/phonet/pep.c
> index 441a26706592..83ea13a50690 100644
> --- a/net/phonet/pep.c
> +++ b/net/phonet/pep.c
> @@ -1237,11 +1237,11 @@ struct sk_buff *pep_read(struct sock *sk)
>   		pipe_grant_credits(sk, GFP_ATOMIC);
>   	return skb;
>   }
>   
>   static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -		       int noblock, int flags, int *addr_len)
> +		       int flags, int *addr_len)
>   {
>   	struct sk_buff *skb;
>   	int err;
>   
>   	if (flags & ~(MSG_OOB|MSG_PEEK|MSG_TRUNC|MSG_DONTWAIT|MSG_WAITALL|
> @@ -1266,11 +1266,10 @@ static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
>   		}
>   		if (flags & MSG_OOB)
>   			return -EINVAL;
>   	}
>   
> -	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)
>   			err = -ECONNRESET;
> diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
> index 2e8a896af81a..17c4e236ec8b 100644
> --- a/net/tls/tls_sw.c
> +++ b/net/tls/tls_sw.c
> @@ -1720,11 +1720,10 @@ static int process_rx_list(struct tls_sw_context_rx *ctx,
>   }
>   
>   int tls_sw_recvmsg(struct sock *sk,
>   		   struct msghdr *msg,
>   		   size_t len,
> -		   int nonblock,
>   		   int flags,
>   		   int *addr_len)
>   {
>   	struct tls_context *tls_ctx = tls_get_ctx(sk);
>   	struct tls_sw_context_rx *ctx = tls_sw_ctx_rx(tls_ctx);
> @@ -1742,12 +1741,10 @@ int tls_sw_recvmsg(struct sock *sk,
>   	bool is_kvec = iov_iter_is_kvec(&msg->msg_iter);
>   	bool is_peek = flags & MSG_PEEK;
>   	bool bpf_strp_enabled;
>   	bool zc_capable;
>   
> -	flags |= nonblock;
> -
>   	if (unlikely(flags & MSG_ERRQUEUE))
>   		return sock_recv_errqueue(sk, msg, len, SOL_IP, IP_RECVERR);
>   
>   	psock = sk_psock_get(sk);
>   	lock_sock(sk);
> diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
> index fecbd95da918..e1dd9e9c8452 100644
> --- a/net/unix/af_unix.c
> +++ b/net/unix/af_unix.c
> @@ -2482,12 +2482,11 @@ static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg, size_t si
>   
>   #ifdef CONFIG_BPF_SYSCALL
>   	const struct proto *prot = READ_ONCE(sk->sk_prot);
>   
>   	if (prot != &unix_dgram_proto)
> -		return prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
> -					    flags & ~MSG_DONTWAIT, NULL);
> +		return prot->recvmsg(sk, msg, size, flags, NULL);
>   #endif
>   	return __unix_dgram_recvmsg(sk, msg, size, flags);
>   }
>   
>   static int unix_read_sock(struct sock *sk, read_descriptor_t *desc,
> @@ -2915,12 +2914,11 @@ static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg,
>   #ifdef CONFIG_BPF_SYSCALL
>   	struct sock *sk = sock->sk;
>   	const struct proto *prot = READ_ONCE(sk->sk_prot);
>   
>   	if (prot != &unix_stream_proto)
> -		return prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT,
> -					    flags & ~MSG_DONTWAIT, NULL);
> +		return prot->recvmsg(sk, msg, size, flags, NULL);
>   #endif
>   	return unix_stream_read_generic(&state, true);
>   }
>   
>   static int unix_stream_splice_actor(struct sk_buff *skb,
> diff --git a/net/unix/unix_bpf.c b/net/unix/unix_bpf.c
> index 452376c6f419..7cf14c6b1725 100644
> --- a/net/unix/unix_bpf.c
> +++ b/net/unix/unix_bpf.c
> @@ -46,12 +46,11 @@ static int __unix_recvmsg(struct sock *sk, struct msghdr *msg,
>   	else
>   		return __unix_stream_recvmsg(sk, msg, len, flags);
>   }
>   
>   static int unix_bpf_recvmsg(struct sock *sk, struct msghdr *msg,
> -			    size_t len, int nonblock, int flags,
> -			    int *addr_len)
> +			    size_t len, int flags, int *addr_len)
>   {
>   	struct unix_sock *u = unix_sk(sk);
>   	struct sk_psock *psock;
>   	int copied;
>   
> @@ -71,11 +70,11 @@ static int unix_bpf_recvmsg(struct sock *sk, struct msghdr *msg,
>   	copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
>   	if (!copied) {
>   		long timeo;
>   		int data;
>   
> -		timeo = sock_rcvtimeo(sk, nonblock);
> +		timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
>   		data = unix_msg_wait_data(sk, psock, timeo);
>   		if (data) {
>   			if (!sk_psock_queue_empty(psock))
>   				goto msg_bytes_ready;
>   			mutex_unlock(&u->iolock);
> diff --git a/net/xfrm/espintcp.c b/net/xfrm/espintcp.c
> index 1f08ebf7d80c..82d14eea1b5a 100644
> --- a/net/xfrm/espintcp.c
> +++ b/net/xfrm/espintcp.c
> @@ -129,20 +129,18 @@ static int espintcp_parse(struct strparser *strp, struct sk_buff *skb)
>   
>   	return len;
>   }
>   
>   static int espintcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> -			    int nonblock, int flags, int *addr_len)
> +			    int flags, int *addr_len)
>   {
>   	struct espintcp_ctx *ctx = espintcp_getctx(sk);
>   	struct sk_buff *skb;
>   	int err = 0;
>   	int copied;
>   	int off = 0;
>   
> -	flags |= nonblock ? MSG_DONTWAIT : 0;
> -
>   	skb = __skb_recv_datagram(sk, &ctx->ike_queue, flags, &off, &err);
>   	if (!skb) {
>   		if (err == -EAGAIN && sk->sk_shutdown & RCV_SHUTDOWN)
>   			return 0;
>   		return err;

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next v2] net: remove noblock parameter from recvmsg() entities
  2022-04-10 20:06 [PATCH net-next v2] net: remove noblock parameter from recvmsg() entities Oliver Hartkopp
  2022-04-10 20:34 ` Oliver Hartkopp
@ 2022-04-10 23:13 ` kernel test robot
  1 sibling, 0 replies; 3+ messages in thread
From: kernel test robot @ 2022-04-10 23:13 UTC (permalink / raw)
  To: Oliver Hartkopp, netdev, kuba, davem; +Cc: llvm, kbuild-all, Oliver Hartkopp

Hi Oliver,

I love your patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Oliver-Hartkopp/net-remove-noblock-parameter-from-recvmsg-entities/20220411-040924
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 516a2f1f6f3ce1a87931579cc21de6e7e33440bd
config: x86_64-randconfig-a004-20220411 (https://download.01.org/0day-ci/archive/20220411/202204110751.725yvW2W-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 256c6b0ba14e8a7ab6373b61b7193ea8c0a3651c)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/8c4751aaa17d68be940bdaf4bb1402d1a34a60e7
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Oliver-Hartkopp/net-remove-noblock-parameter-from-recvmsg-entities/20220411-040924
        git checkout 8c4751aaa17d68be940bdaf4bb1402d1a34a60e7
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash net/dccp/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> net/dccp/ipv4.c:959:14: error: incompatible function pointer types initializing 'int (*)(struct sock *, struct msghdr *, size_t, int, int *)' (aka 'int (*)(struct sock *, struct msghdr *, unsigned long, int, int *)') with an expression of type 'int (struct sock *, struct msghdr *, size_t, int, int, int *)' (aka 'int (struct sock *, struct msghdr *, unsigned long, int, int, int *)') [-Werror,-Wincompatible-function-pointer-types]
           .recvmsg                = dccp_recvmsg,
                                     ^~~~~~~~~~~~
   1 error generated.
--
>> net/dccp/ipv6.c:1044:16: error: incompatible function pointer types initializing 'int (*)(struct sock *, struct msghdr *, size_t, int, int *)' (aka 'int (*)(struct sock *, struct msghdr *, unsigned long, int, int *)') with an expression of type 'int (struct sock *, struct msghdr *, size_t, int, int, int *)' (aka 'int (struct sock *, struct msghdr *, unsigned long, int, int, int *)') [-Werror,-Wincompatible-function-pointer-types]
           .recvmsg           = dccp_recvmsg,
                                ^~~~~~~~~~~~
   1 error generated.


vim +959 net/dccp/ipv4.c

6d6ee43e0b8b8d Arnaldo Carvalho de Melo 2005-12-13  947  
5e0817f84c3328 Adrian Bunk              2006-03-20  948  static struct proto dccp_v4_prot = {
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  949  	.name			= "DCCP",
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  950  	.owner			= THIS_MODULE,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  951  	.close			= dccp_close,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  952  	.connect		= dccp_v4_connect,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  953  	.disconnect		= dccp_disconnect,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  954  	.ioctl			= dccp_ioctl,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  955  	.init			= dccp_v4_init_sock,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  956  	.setsockopt		= dccp_setsockopt,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  957  	.getsockopt		= dccp_getsockopt,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  958  	.sendmsg		= dccp_sendmsg,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09 @959  	.recvmsg		= dccp_recvmsg,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  960  	.backlog_rcv		= dccp_v4_do_rcv,
ab1e0a13d70299 Arnaldo Carvalho de Melo 2008-02-03  961  	.hash			= inet_hash,
ab1e0a13d70299 Arnaldo Carvalho de Melo 2008-02-03  962  	.unhash			= inet_unhash,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  963  	.accept			= inet_csk_accept,
ab1e0a13d70299 Arnaldo Carvalho de Melo 2008-02-03  964  	.get_port		= inet_csk_get_port,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  965  	.shutdown		= dccp_shutdown,
3e0fadc51f2fde Arnaldo Carvalho de Melo 2006-03-20  966  	.destroy		= dccp_destroy_sock,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  967  	.orphan_count		= &dccp_orphan_count,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  968  	.max_header		= MAX_DCCP_HEADER,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  969  	.obj_size		= sizeof(struct dccp_sock),
5f0d5a3ae7cff0 Paul E. McKenney         2017-01-18  970  	.slab_flags		= SLAB_TYPESAFE_BY_RCU,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  971  	.rsk_prot		= &dccp_request_sock_ops,
6d6ee43e0b8b8d Arnaldo Carvalho de Melo 2005-12-13  972  	.twsk_prot		= &dccp_timewait_sock_ops,
39d8cda76cfb11 Pavel Emelyanov          2008-03-22  973  	.h.hashinfo		= &dccp_hashinfo,
7c657876b63cb1 Arnaldo Carvalho de Melo 2005-08-09  974  };
6d6ee43e0b8b8d Arnaldo Carvalho de Melo 2005-12-13  975  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-04-10 23:14 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-10 20:06 [PATCH net-next v2] net: remove noblock parameter from recvmsg() entities Oliver Hartkopp
2022-04-10 20:34 ` Oliver Hartkopp
2022-04-10 23:13 ` kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.