net: remove noblock parameter from recvmsg() entities
authorOliver Hartkopp <socketcan@hartkopp.net>
Mon, 11 Apr 2022 12:49:55 +0000 (14:49 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 12 Apr 2022 13:00:25 +0000 (15:00 +0200)
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
where needed (to preserve for the formerly separated no(n)block condition).

Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Link: https://lore.kernel.org/r/20220411124955.154876-1-socketcan@hartkopp.net
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
37 files changed:
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls.h
drivers/net/ethernet/chelsio/inline_crypto/chtls/chtls_io.c
include/net/ping.h
include/net/sctp/sctp.h
include/net/sock.h
include/net/tcp.h
include/net/tls.h
include/net/udp.h
net/core/sock.c
net/dccp/dccp.h
net/dccp/proto.c
net/ieee802154/socket.c
net/ipv4/af_inet.c
net/ipv4/ping.c
net/ipv4/raw.c
net/ipv4/tcp.c
net/ipv4/tcp_bpf.c
net/ipv4/udp.c
net/ipv4/udp_bpf.c
net/ipv4/udp_impl.h
net/ipv6/af_inet6.c
net/ipv6/raw.c
net/ipv6/udp.c
net/ipv6/udp_impl.h
net/l2tp/l2tp_ip.c
net/l2tp/l2tp_ip6.c
net/mptcp/protocol.c
net/phonet/datagram.c
net/phonet/pep.c
net/sctp/socket.c
net/sctp/ulpevent.c
net/sunrpc/svcsock.c
net/sunrpc/xprtsock.c
net/tls/tls_sw.c
net/unix/af_unix.c
net/unix/unix_bpf.c
net/xfrm/espintcp.c

index 9e237801364210ed337a135f2825b77e054037ab..41714203ace8986790d08d4334045351007ab99f 100644 (file)
@@ -567,7 +567,7 @@ 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,
index c320cc8ca68d61070fdb069316088aae67ba01af..539992dad8ba3444dc4c68720d7c74882fdf00f4 100644 (file)
@@ -1426,7 +1426,7 @@ static void chtls_cleanup_rbuf(struct sock *sk, int copied)
 }
 
 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;
@@ -1441,7 +1441,7 @@ static int chtls_pt_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
 
        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)))
@@ -1616,7 +1616,7 @@ skip_copy:
  * 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;
@@ -1626,7 +1626,7 @@ static int peekmsg(struct sock *sk, struct msghdr *msg,
        long timeo;
 
        lock_sock(sk);
-       timeo = sock_rcvtimeo(sk, nonblock);
+       timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
        peek_seq = tp->copied_seq;
 
        do {
@@ -1737,7 +1737,7 @@ found_ok_skb:
 }
 
 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;
@@ -1750,25 +1750,23 @@ int chtls_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
        buffers_freed = 0;
 
        if (unlikely(flags & MSG_OOB))
-               return tcp_prot.recvmsg(sk, msg, len, nonblock, flags,
-                                       addr_len);
+               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,
-                                       flags, addr_len);
+               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)))
index b68fbfdb606fac8e60f5cda719c7b53e59004c9b..e4ff3911cbf563633be3645c60ddaef2e2260c60 100644 (file)
@@ -71,7 +71,7 @@ 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);
index bf3716fe83e07a9f7e766878dd588a0d3f1e1d5d..a04999ee99b0add5b07ca620672abccd67204134 100644 (file)
@@ -103,7 +103,7 @@ void sctp_copy_sock(struct sock *newsk, struct sock *sk,
                    struct sctp_association *asoc);
 extern struct percpu_counter sctp_sockets_allocated;
 int sctp_asconf_mgmt(struct sctp_sock *, struct sctp_sockaddr_entry *);
-struct sk_buff *sctp_skb_recv_datagram(struct sock *, int, int, int *);
+struct sk_buff *sctp_skb_recv_datagram(struct sock *, int, int *);
 
 typedef int (*sctp_callback_t)(struct sctp_endpoint *, struct sctp_transport *, void *);
 void sctp_transport_walk_start(struct rhashtable_iter *iter);
index 1a988e605f0992ecb020876150a0fb129940e157..a01d6c421aa2caad4032167284eed9565d4bd545 100644 (file)
@@ -1202,8 +1202,7 @@ struct proto {
        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,
index 6d50a662bf89bbac9deaee961838409bad9775a9..679b1964d49414fcb1c361778fd0ac664e8c8ea5 100644 (file)
@@ -407,7 +407,7 @@ 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);
index 6fe78361c8c8472936543a0c46fc683fb1199d0c..b59f0a63292b367341b3e95e366fd4246f3056c2 100644 (file)
@@ -371,7 +371,7 @@ 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,
index f1c2a88c9005a86bc6e3dc35bdd0e8f7d3b3fe4a..b83a003305667d1c1cd1bac00580fec9164958b0 100644 (file)
@@ -250,14 +250,14 @@ 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);
+struct sk_buff *__skb_recv_udp(struct sock *sk, unsigned int flags, 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);
index 05e0cfa064b6e98786a795297ec2914c029e2486..29abec3eabd8905f2671e0b5789878a129453ef6 100644 (file)
@@ -3506,8 +3506,7 @@ int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        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;
index 671c377f08896b5686b2b54186c1af7a933be6e1..7dfc00c9fb32b887d770c68a755ce71c6c5ff23d 100644 (file)
@@ -293,8 +293,8 @@ int dccp_setsockopt(struct sock *sk, int level, int optname,
                    sockptr_t optval, unsigned int optlen);
 int dccp_ioctl(struct sock *sk, int cmd, unsigned long arg);
 int dccp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);
-int dccp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
-                int flags, int *addr_len);
+int dccp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags,
+                int *addr_len);
 void dccp_shutdown(struct sock *sk, int how);
 int inet_dccp_listen(struct socket *sock, int backlog);
 __poll_t dccp_poll(struct file *file, struct socket *sock,
index a976b4d2989259a521a94f91a779cb79a81dada9..58421f94427e1881827b575863cd8863bcfbdc90 100644 (file)
@@ -791,8 +791,8 @@ out_discard:
 
 EXPORT_SYMBOL_GPL(dccp_sendmsg);
 
-int dccp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
-                int flags, int *addr_len)
+int dccp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags,
+                int *addr_len)
 {
        const struct dccp_hdr *dh;
        long timeo;
@@ -804,7 +804,7 @@ int dccp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
                goto out;
        }
 
-       timeo = sock_rcvtimeo(sk, nonblock);
+       timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 
        do {
                struct sk_buff *skb = skb_peek(&sk->sk_receive_queue);
index a725dd9bbda8bc66a1c65182ac9b707d62ac1152..f24852814fa3bc5b0cd4ffcb2b72ba4d6fb5ed83 100644 (file)
@@ -308,13 +308,12 @@ out:
 }
 
 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;
@@ -696,7 +695,7 @@ out:
 }
 
 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;
@@ -704,7 +703,6 @@ 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);
 
-       flags |= (noblock ? MSG_DONTWAIT : 0);
        skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
index 72fde2888ad2fc2eaa48e87f7db3ca2c9a67f459..195ecfa2f00000bfdd45af75c3789e20aa2d66b3 100644 (file)
@@ -836,7 +836,7 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
 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)
 {
@@ -848,8 +848,7 @@ int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
                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;
index 2897fcf7121175868290af11b100aff0152fd85b..319c181bfbb6628667bbf71f74416912cac789bf 100644 (file)
@@ -844,8 +844,8 @@ do_confirm:
        goto out;
 }
 
-int ping_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
-                int flags, int *addr_len)
+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;
@@ -861,7 +861,6 @@ 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);
 
-       flags |= (noblock ? MSG_DONTWAIT : 0);
        skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
index c9dd9603f2e733873109ddf1d7a23695b0bca100..4056b0da85ea517cd74894f176e858a8d703160b 100644 (file)
@@ -753,7 +753,7 @@ out:
  */
 
 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;
@@ -769,7 +769,6 @@ static int raw_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                goto out;
        }
 
-       flags |= (noblock ? MSG_DONTWAIT : 0);
        skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
index e31cf137c6140f76f838b4a0dcddf9f104ad653b..e20b87b3bf907a9b04b7531936129fb729e96c52 100644 (file)
@@ -1877,8 +1877,7 @@ static void tcp_zerocopy_set_hint_for_skb(struct sock *sk,
 }
 
 static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
-                             int nonblock, int flags,
-                             struct scm_timestamping_internal *tss,
+                             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,
@@ -1900,7 +1899,7 @@ static int receive_fallback_to_copy(struct sock *sk,
        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;
@@ -2316,8 +2315,7 @@ static int tcp_inq_hint(struct sock *sk)
  */
 
 static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
-                             int nonblock, int flags,
-                             struct scm_timestamping_internal *tss,
+                             int flags, struct scm_timestamping_internal *tss,
                              int *cmsg_flags)
 {
        struct tcp_sock *tp = tcp_sk(sk);
@@ -2337,7 +2335,7 @@ static int tcp_recvmsg_locked(struct sock *sk, struct msghdr *msg, size_t len,
 
        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)
@@ -2556,8 +2554,8 @@ recv_sndq:
        goto out;
 }
 
-int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
-               int flags, int *addr_len)
+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;
@@ -2568,11 +2566,10 @@ int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
        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,
-                                &cmsg_flags);
+       ret = tcp_recvmsg_locked(sk, msg, len, flags, &tss, &cmsg_flags);
        release_sock(sk);
        sk_defer_free_flush(sk);
 
index 1cdcb4df0eb7e746e41baadd88b0f864d8690eff..be3947e70fec57cee1342bbf4e77ffc32cad4f9c 100644 (file)
@@ -174,7 +174,6 @@ 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)
 {
@@ -186,7 +185,7 @@ static int tcp_bpf_recvmsg_parser(struct sock *sk,
 
        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:
@@ -211,7 +210,7 @@ msg_bytes_ready:
                        goto out;
                }
 
-               timeo = sock_rcvtimeo(sk, nonblock);
+               timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
                if (!timeo) {
                        copied = -EAGAIN;
                        goto out;
@@ -234,7 +233,7 @@ out:
 }
 
 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;
@@ -244,11 +243,11 @@ static int tcp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t 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:
@@ -257,14 +256,14 @@ msg_bytes_ready:
                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;
        }
index 6b4d8361560fa15b5efb6f2e7687371fdf505da9..aa8545ca69645edf4ec4e5966a64de5a2987b7d4 100644 (file)
@@ -1726,7 +1726,7 @@ int udp_ioctl(struct sock *sk, int cmd, unsigned long arg)
 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;
@@ -1735,7 +1735,6 @@ struct sk_buff *__skb_recv_udp(struct sock *sk, unsigned int flags,
        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;
@@ -1805,7 +1804,7 @@ int udp_read_sock(struct sock *sk, read_descriptor_t *desc,
                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;
 
@@ -1843,8 +1842,8 @@ EXPORT_SYMBOL(udp_read_sock);
  *     return it, otherwise we block.
  */
 
-int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
-               int flags, int *addr_len)
+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);
@@ -1859,7 +1858,7 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
 
 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;
 
index bbe6569c9ad346b4b8afaadaceef507a40047289..ff15918b7bdc7fac21a1b8eb51a5342349cff31a 100644 (file)
 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,
-                                                addr_len);
+               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)
@@ -61,7 +60,7 @@ static int udp_msg_wait_data(struct sock *sk, struct sk_psock *psock,
 }
 
 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;
@@ -71,10 +70,10 @@ static int udp_bpf_recvmsg(struct sock *sk, struct msghdr *msg, size_t 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;
        }
 
@@ -84,12 +83,12 @@ msg_bytes_ready:
                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;
index 2878d8285cafe7acefbd7b20171eef94aa8e8280..4ba7a88a1b1d37d87af3331d89c3cddb7b4c05dc 100644 (file)
@@ -17,8 +17,8 @@ int udp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
 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 flags, int *addr_len);
+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);
index 7d7b7523d126539d8e5c84e4603ec16889a15498..6595a78672c800e970a85e6968e71fef62dd834f 100644 (file)
@@ -654,7 +654,7 @@ int inet6_sendmsg(struct socket *sock, struct msghdr *msg, size_t 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)
 {
@@ -669,8 +669,7 @@ int inet6_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
        /* 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;
index 8bb41f3b246a9728dd6e738b76389a9cf8b56097..0d7c13d33d1a7b019caed97ceb085bd4d875e9e3 100644 (file)
@@ -460,7 +460,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
  */
 
 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);
@@ -477,7 +477,6 @@ 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);
 
-       flags |= (noblock ? MSG_DONTWAIT : 0);
        skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
index 7f0fa9bd9ffe0637ca935cbd42aaa1b84a89fb75..db9449b52dbe5dfca292b6d2335f91c2a4ecea4d 100644 (file)
@@ -322,7 +322,7 @@ static int udp6_skb_len(struct sk_buff *skb)
  */
 
 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);
@@ -342,7 +342,7 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t 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;
 
index b2fcc46c1630e0b602d2e8c3bab976d2bd9abca2..4251e49d32a0d067a282359e98eab0e8f67218fd 100644 (file)
@@ -20,8 +20,8 @@ int udpv6_getsockopt(struct sock *sk, int level, int optname,
 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 flags, int *addr_len);
+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
index c6a5cc2d88e72d02cf82d07fa683983f8cac4552..6af09e188e52cfd84defb42ad34aea25f66f1e25 100644 (file)
@@ -515,7 +515,7 @@ no_route:
 }
 
 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;
@@ -526,7 +526,6 @@ static int l2tp_ip_recvmsg(struct sock *sk, struct msghdr *msg,
        if (flags & MSG_OOB)
                goto out;
 
-       flags |= (noblock ? MSG_DONTWAIT : 0);
        skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
index 97fde8a9209bb9817a87520f28baf0760c172974..217c7192691e160e9727afd78126006aba3736b4 100644 (file)
@@ -657,7 +657,7 @@ do_confirm:
 }
 
 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);
@@ -671,7 +671,6 @@ 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);
 
-       flags |= (noblock ? MSG_DONTWAIT : 0);
        skb = skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
index 8f54293c1d88759cfb6ce997f4b87b7ebff9c70b..0492aa9308c7798d0316903e187a6b89393155d5 100644 (file)
@@ -2012,7 +2012,7 @@ static unsigned int mptcp_inq_hint(const struct sock *sk)
 }
 
 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;
@@ -2030,7 +2030,7 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                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);
index 3f2e62b63dd4293a11ba88ca294050829461361a..ff5f49ab236edea3c5e8a5a5892ae499d33fb122 100644 (file)
@@ -112,7 +112,7 @@ static int pn_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 }
 
 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;
@@ -123,7 +123,6 @@ static int pn_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                        MSG_CMSG_COMPAT))
                goto out_nofree;
 
-       flags |= (noblock ? MSG_DONTWAIT : 0);
        skb = skb_recv_datagram(sk, flags, &rval);
        if (skb == NULL)
                goto out_nofree;
index 441a267065923bcd80e7fef8536976c9c8a8c515..83ea13a50690b88f6d51c995e7c8b766baea3c2d 100644 (file)
@@ -1239,7 +1239,7 @@ struct sk_buff *pep_read(struct sock *sk)
 }
 
 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;
@@ -1268,7 +1268,6 @@ static int pep_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                        return -EINVAL;
        }
 
-       flags |= (noblock ? MSG_DONTWAIT : 0);
        skb = skb_recv_datagram(sk, flags, &err);
        lock_sock(sk);
        if (skb == NULL) {
index 3e1a9600be5e1a6284ebef1df39d41fe2b3bf6b4..4c7865f14064c9281f1aa5580a241cf473f7430d 100644 (file)
@@ -2084,7 +2084,7 @@ static int sctp_skb_pull(struct sk_buff *skb, int len)
  *            5 for complete description of the flags.
  */
 static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
-                       int noblock, int flags, int *addr_len)
+                       int flags, int *addr_len)
 {
        struct sctp_ulpevent *event = NULL;
        struct sctp_sock *sp = sctp_sk(sk);
@@ -2093,9 +2093,8 @@ static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
        int err = 0;
        int skb_len;
 
-       pr_debug("%s: sk:%p, msghdr:%p, len:%zd, noblock:%d, flags:0x%x, "
-                "addr_len:%p)\n", __func__, sk, msg, len, noblock, flags,
-                addr_len);
+       pr_debug("%s: sk:%p, msghdr:%p, len:%zd, flags:0x%x, addr_len:%p)\n",
+                __func__, sk, msg, len, flags, addr_len);
 
        lock_sock(sk);
 
@@ -2105,7 +2104,7 @@ static int sctp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
                goto out;
        }
 
-       skb = sctp_skb_recv_datagram(sk, flags, noblock, &err);
+       skb = sctp_skb_recv_datagram(sk, flags, &err);
        if (!skb)
                goto out;
 
@@ -8978,14 +8977,13 @@ out:
  * Note: This is pretty much the same routine as in core/datagram.c
  * with a few changes to make lksctp work.
  */
-struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags,
-                                      int noblock, int *err)
+struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags, int *err)
 {
        int error;
        struct sk_buff *skb;
        long timeo;
 
-       timeo = sock_rcvtimeo(sk, noblock);
+       timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
 
        pr_debug("%s: timeo:%ld, max:%ld\n", __func__, timeo,
                 MAX_SCHEDULE_TIMEOUT);
@@ -9018,7 +9016,7 @@ struct sk_buff *sctp_skb_recv_datagram(struct sock *sk, int flags,
                        break;
 
                if (sk_can_busy_loop(sk)) {
-                       sk_busy_loop(sk, noblock);
+                       sk_busy_loop(sk, flags & MSG_DONTWAIT);
 
                        if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
                                continue;
index 0c3d2b4d73215b1fdb0e8888e7ab3b388b751732..8920ca92a0115c61ed58d9c09af1cbc2b1feb04b 100644 (file)
@@ -1063,7 +1063,7 @@ void sctp_ulpevent_read_nxtinfo(const struct sctp_ulpevent *event,
        struct sk_buff *skb;
        int err;
 
-       skb = sctp_skb_recv_datagram(sk, MSG_PEEK, 1, &err);
+       skb = sctp_skb_recv_datagram(sk, MSG_PEEK | MSG_DONTWAIT, &err);
        if (skb != NULL) {
                __sctp_ulpevent_read_nxtinfo(sctp_skb2event(skb),
                                             msghdr, skb);
index 478f857cdaed4548e7c181b3a6cc41ecf5a1425b..a21f5684345ffcf62317b20a1f0e6270b147c1fa 100644 (file)
@@ -464,7 +464,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
                             0, 0, MSG_PEEK | MSG_DONTWAIT);
        if (err < 0)
                goto out_recv_err;
-       skb = skb_recv_udp(svsk->sk_sk, 0, 1, &err);
+       skb = skb_recv_udp(svsk->sk_sk, MSG_DONTWAIT, &err);
        if (!skb)
                goto out_recv_err;
 
index 78af7518f263ddcd9c6726698d802367aafa34d6..d11aa2b7c53296801afb63b50cc5a817bddb205f 100644 (file)
@@ -1337,7 +1337,7 @@ static void xs_udp_data_receive(struct sock_xprt *transport)
        if (sk == NULL)
                goto out;
        for (;;) {
-               skb = skb_recv_udp(sk, 0, 1, &err);
+               skb = skb_recv_udp(sk, MSG_DONTWAIT, &err);
                if (skb == NULL)
                        break;
                xs_udp_data_read_skb(&transport->xprt, sk, skb);
index 2e8a896af81a8a28475379d9ce7d27f3af194714..17c4e236ec8b335a40037f608d17911602f0fdf3 100644 (file)
@@ -1722,7 +1722,6 @@ 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)
 {
@@ -1744,8 +1743,6 @@ int tls_sw_recvmsg(struct sock *sk,
        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);
 
index fecbd95da9185eac29ee8cdd0e0a0e6520b4a0ce..e1dd9e9c8452741e27e95f91b2cdbc5c5c1c38d6 100644 (file)
@@ -2484,8 +2484,7 @@ static int unix_dgram_recvmsg(struct socket *sock, struct msghdr *msg, size_t si
        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);
 }
@@ -2917,8 +2916,7 @@ static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg,
        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);
 }
index 452376c6f4194373a58b8b87d2168cf4222bde57..7cf14c6b172549a09f23e5eb41c145d0fb0cb931 100644 (file)
@@ -48,8 +48,7 @@ static int __unix_recvmsg(struct sock *sk, struct msghdr *msg,
 }
 
 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;
@@ -73,7 +72,7 @@ msg_bytes_ready:
                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))
index 1f08ebf7d80c56d4340e64a5aad8511e673c2105..82d14eea1b5ad06a481137867ca070a465463b9a 100644 (file)
@@ -131,7 +131,7 @@ static int espintcp_parse(struct strparser *strp, struct sk_buff *skb)
 }
 
 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;
@@ -139,8 +139,6 @@ static int espintcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
        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)