]> git.baikalelectronics.ru Git - kernel.git/commit
mptcp: don't orphan ssk in mptcp_close()
authorMenglong Dong <imagedong@tencent.com>
Mon, 28 Nov 2022 15:42:37 +0000 (16:42 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 29 Nov 2022 02:03:07 +0000 (18:03 -0800)
commitdbb5f75f9455a3d401306bdc26c3c2b1f7cb33ce
treeea41331a6c0bafc6b20fd7688fc1a31270c5766a
parent39e2778473dc507c1314e319e23fd3cafd59d88e
mptcp: don't orphan ssk in mptcp_close()

All of the subflows of a msk will be orphaned in mptcp_close(), which
means the subflows are in DEAD state. After then, DATA_FIN will be sent,
and the other side will response with a DATA_ACK for this DATA_FIN.

However, if the other side still has pending data, the data that received
on these subflows will not be passed to the msk, as they are DEAD and
subflow_data_ready() will not be called in tcp_data_ready(). Therefore,
these data can't be acked, and they will be retransmitted again and again,
until timeout.

Fix this by setting ssk->sk_socket and ssk->sk_wq to 'NULL', instead of
orphaning the subflows in __mptcp_close(), as Paolo suggested.

Fixes: 6399a9019dd6 ("mptcp: refactor shutdown and close")
Reviewed-by: Biao Jiang <benbjiang@tencent.com>
Reviewed-by: Mengen Sun <mengensun@tencent.com>
Signed-off-by: Menglong Dong <imagedong@tencent.com>
Reviewed-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/protocol.c