Skip to content

Commit 26d3e21

Browse files
menglongdongkuba-moo
authored andcommitted
mptcp: factor out __mptcp_close() without socket lock
Factor out __mptcp_close() from mptcp_close(). The caller of __mptcp_close() should hold the socket lock, and cancel mptcp work when __mptcp_close() returns true. This function will be used in the next commit. Fixes: f296234 ("mptcp: Add handling of incoming MP_JOIN requests") Fixes: 6aeed90 ("mptcp: fix race on unaccepted mptcp sockets") Cc: [email protected] Reviewed-by: Jiang Biao <[email protected]> Reviewed-by: Mengen Sun <[email protected]> Acked-by: Paolo Abeni <[email protected]> Signed-off-by: Menglong Dong <[email protected]> Signed-off-by: Mat Martineau <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 3e1308a commit 26d3e21

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

net/mptcp/protocol.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2802,13 +2802,12 @@ static void __mptcp_destroy_sock(struct sock *sk)
28022802
sock_put(sk);
28032803
}
28042804

2805-
static void mptcp_close(struct sock *sk, long timeout)
2805+
bool __mptcp_close(struct sock *sk, long timeout)
28062806
{
28072807
struct mptcp_subflow_context *subflow;
28082808
struct mptcp_sock *msk = mptcp_sk(sk);
28092809
bool do_cancel_work = false;
28102810

2811-
lock_sock(sk);
28122811
sk->sk_shutdown = SHUTDOWN_MASK;
28132812

28142813
if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) {
@@ -2850,6 +2849,17 @@ static void mptcp_close(struct sock *sk, long timeout)
28502849
} else {
28512850
mptcp_reset_timeout(msk, 0);
28522851
}
2852+
2853+
return do_cancel_work;
2854+
}
2855+
2856+
static void mptcp_close(struct sock *sk, long timeout)
2857+
{
2858+
bool do_cancel_work;
2859+
2860+
lock_sock(sk);
2861+
2862+
do_cancel_work = __mptcp_close(sk, timeout);
28532863
release_sock(sk);
28542864
if (do_cancel_work)
28552865
mptcp_cancel_work(sk);

net/mptcp/protocol.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,7 @@ void mptcp_subflow_reset(struct sock *ssk);
612612
void mptcp_subflow_queue_clean(struct sock *ssk);
613613
void mptcp_sock_graft(struct sock *sk, struct socket *parent);
614614
struct socket *__mptcp_nmpc_socket(const struct mptcp_sock *msk);
615+
bool __mptcp_close(struct sock *sk, long timeout);
615616

616617
bool mptcp_addresses_equal(const struct mptcp_addr_info *a,
617618
const struct mptcp_addr_info *b, bool use_port);

0 commit comments

Comments
 (0)