mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 18:19:28 +09:00
mptcp: do not wakeup listener for MPJ subflows
commit52557dbc75upstream. MPJ subflows are not exposed as fds to user spaces. As such, incoming MPJ subflows are removed from the accept queue by tcp_check_req()/tcp_get_cookie_sock(). Later tcp_child_process() invokes subflow_data_ready() on the parent socket regardless of the subflow kind, leading to poll wakeups even if the later accept will block. Address the issue by double-checking the queue state before waking the user-space. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/164 Reported-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Fixes:f296234c98("mptcp: Add handling of incoming MP_JOIN requests") Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
9adbc25b0e
commit
5ab779a68e
@@ -981,6 +981,12 @@ static void subflow_data_ready(struct sock *sk)
|
||||
|
||||
msk = mptcp_sk(parent);
|
||||
if (state & TCPF_LISTEN) {
|
||||
/* MPJ subflow are removed from accept queue before reaching here,
|
||||
* avoid stray wakeups
|
||||
*/
|
||||
if (reqsk_queue_empty(&inet_csk(sk)->icsk_accept_queue))
|
||||
return;
|
||||
|
||||
set_bit(MPTCP_DATA_READY, &msk->flags);
|
||||
parent->sk_data_ready(parent);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user