Message ID | 20210506102243.2390-2-fw@strlen.de |
---|---|
State | Superseded, archived |
Delegated to: | Mat Martineau |
Headers | show |
Series | add cmsg support to receive path | expand |
On Thu, 6 May 2021, Florian Westphal wrote: > The setting is only relevant for the msk socket. > While at it, also handle rcvlowat/rcvtimeo this way. > > Signed-off-by: Florian Westphal <fw@strlen.de> > --- > net/mptcp/protocol.c | 7 +++++++ > net/mptcp/sockopt.c | 8 ++++++++ > 2 files changed, 15 insertions(+) > > diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c > index aec8e77b18e4..e51070883064 100644 > --- a/net/mptcp/protocol.c > +++ b/net/mptcp/protocol.c > @@ -12,6 +12,7 @@ > #include <linux/sched/signal.h> > #include <linux/atomic.h> > #include <net/sock.h> > +#include <net/busy_poll.h> > #include <net/inet_common.h> > #include <net/inet_hashtables.h> > #include <net/protocol.h> > @@ -1966,6 +1967,12 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, > if (unlikely(flags & MSG_ERRQUEUE)) > return inet_recv_error(sk, msg, len, addr_len); > > + if (sk_can_busy_loop(sk) && > + skb_queue_empty_lockless(&msk->receive_queue) && > + skb_queue_empty_lockless(&sk->sk_receive_queue) && > + inet_sk_state_load(sk) == TCP_ESTABLISHED) Minor nit-pick - extra indent space on the last line of this conditional. I'd just ask Matthieu to fix up when applying but I have one more comment on patch 5. Mat > + sk_busy_loop(sk, nonblock); > + > mptcp_lock_sock(sk, __mptcp_splice_receive_queue(sk)); > if (unlikely(sk->sk_state == TCP_LISTEN)) { > copied = -ENOTCONN; > diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c > index 00d941b66c1e..c98e4e116992 100644 > --- a/net/mptcp/sockopt.c > +++ b/net/mptcp/sockopt.c > @@ -254,6 +254,14 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname, > return mptcp_setsockopt_sol_socket_int(msk, optname, optval, optlen); > case SO_LINGER: > return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen); > + case SO_RCVLOWAT: > + case SO_RCVTIMEO_OLD: > + case SO_RCVTIMEO_NEW: > + case SO_BUSY_POLL: > + case SO_PREFER_BUSY_POLL: > + case SO_BUSY_POLL_BUDGET: > + /* No need to copy: only relevant for msk */ > + break; > case SO_NO_CHECK: > case SO_DONTROUTE: > case SO_BROADCAST: > -- > 2.26.3 > > > -- Mat Martineau Intel
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index aec8e77b18e4..e51070883064 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -12,6 +12,7 @@ #include <linux/sched/signal.h> #include <linux/atomic.h> #include <net/sock.h> +#include <net/busy_poll.h> #include <net/inet_common.h> #include <net/inet_hashtables.h> #include <net/protocol.h> @@ -1966,6 +1967,12 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, if (unlikely(flags & MSG_ERRQUEUE)) return inet_recv_error(sk, msg, len, addr_len); + if (sk_can_busy_loop(sk) && + skb_queue_empty_lockless(&msk->receive_queue) && + skb_queue_empty_lockless(&sk->sk_receive_queue) && + inet_sk_state_load(sk) == TCP_ESTABLISHED) + sk_busy_loop(sk, nonblock); + mptcp_lock_sock(sk, __mptcp_splice_receive_queue(sk)); if (unlikely(sk->sk_state == TCP_LISTEN)) { copied = -ENOTCONN; diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 00d941b66c1e..c98e4e116992 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -254,6 +254,14 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname, return mptcp_setsockopt_sol_socket_int(msk, optname, optval, optlen); case SO_LINGER: return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen); + case SO_RCVLOWAT: + case SO_RCVTIMEO_OLD: + case SO_RCVTIMEO_NEW: + case SO_BUSY_POLL: + case SO_PREFER_BUSY_POLL: + case SO_BUSY_POLL_BUDGET: + /* No need to copy: only relevant for msk */ + break; case SO_NO_CHECK: case SO_DONTROUTE: case SO_BROADCAST:
The setting is only relevant for the msk socket. While at it, also handle rcvlowat/rcvtimeo this way. Signed-off-by: Florian Westphal <fw@strlen.de> --- net/mptcp/protocol.c | 7 +++++++ net/mptcp/sockopt.c | 8 ++++++++ 2 files changed, 15 insertions(+)