Commit 26aa2314 authored by Paolo Abeni's avatar Paolo Abeni Committed by Jakub Kicinski

mptcp: fix state tracking for fallback socket

We need to cope with some more state transition for
fallback sockets, or could still end-up moving to TCP_CLOSE
too early and avoid spooling some pending data

Fixes: e16163b6 ("mptcp: refactor shutdown and close")
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b2771d24
...@@ -777,7 +777,9 @@ static void mptcp_check_for_eof(struct mptcp_sock *msk) ...@@ -777,7 +777,9 @@ static void mptcp_check_for_eof(struct mptcp_sock *msk)
inet_sk_state_store(sk, TCP_CLOSE_WAIT); inet_sk_state_store(sk, TCP_CLOSE_WAIT);
break; break;
case TCP_FIN_WAIT1: case TCP_FIN_WAIT1:
/* fallback sockets skip TCP_CLOSING - TCP will take care */ inet_sk_state_store(sk, TCP_CLOSING);
break;
case TCP_FIN_WAIT2:
inet_sk_state_store(sk, TCP_CLOSE); inet_sk_state_store(sk, TCP_CLOSE);
break; break;
default: default:
...@@ -2086,10 +2088,16 @@ static void __mptcp_check_send_data_fin(struct sock *sk) ...@@ -2086,10 +2088,16 @@ static void __mptcp_check_send_data_fin(struct sock *sk)
WRITE_ONCE(msk->snd_nxt, msk->write_seq); WRITE_ONCE(msk->snd_nxt, msk->write_seq);
/* fallback socket will not get data_fin/ack, can move to close now */ /* fallback socket will not get data_fin/ack, can move to the next
if (__mptcp_check_fallback(msk) && sk->sk_state == TCP_LAST_ACK) { * state now
inet_sk_state_store(sk, TCP_CLOSE); */
mptcp_close_wake_up(sk); if (__mptcp_check_fallback(msk)) {
if ((1 << sk->sk_state) & (TCPF_CLOSING | TCPF_LAST_ACK)) {
inet_sk_state_store(sk, TCP_CLOSE);
mptcp_close_wake_up(sk);
} else if (sk->sk_state == TCP_FIN_WAIT1) {
inet_sk_state_store(sk, TCP_FIN_WAIT2);
}
} }
__mptcp_flush_join_list(msk); __mptcp_flush_join_list(msk);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment