diff mbox series

[v2,9/12] Squash-to: "subflow: place further subflows on new 'join_list'"

Message ID dcca446f9be51658dad4f51ef87d8bce13126304.1583418573.git.pabeni@redhat.com
State Accepted, archived
Delegated to: Matthieu Baerts
Headers show
Series [v2,1/12] mptcp: rename fourth ack field | expand

Commit Message

Paolo Abeni March 5, 2020, 2:46 p.m. UTC
do not insert the new subflow on join list, if we are going to drop it

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
 net/mptcp/protocol.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 2db55fb1be6b..b3eb886b9488 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1519,6 +1519,7 @@  bool mptcp_finish_join(struct sock *sk)
 	struct mptcp_sock *msk = mptcp_sk(subflow->conn);
 	struct sock *parent = (void *)msk;
 	struct socket *parent_sock;
+	bool ret;
 
 	pr_debug("msk=%p, subflow=%p", msk, subflow);
 
@@ -1530,12 +1531,15 @@  bool mptcp_finish_join(struct sock *sk)
 	if (parent_sock && !sk->sk_socket) {
 		mptcp_sock_graft(sk, parent_sock);
 
-		/* active connections are already on conn_list */
-		spin_lock_bh(&msk->join_list_lock);
-		if (!WARN_ON_ONCE(!list_empty(&subflow->node)))
-			list_add_tail(&subflow->node, &msk->join_list);
-		spin_unlock_bh(&msk->join_list_lock);
-		return mptcp_pm_allow_new_subflow(msk);
+		ret = mptcp_pm_allow_new_subflow(msk);
+		if (ret) {
+			/* active connections are already on conn_list */
+			spin_lock_bh(&msk->join_list_lock);
+			if (!WARN_ON_ONCE(!list_empty(&subflow->node)))
+				list_add_tail(&subflow->node, &msk->join_list);
+			spin_unlock_bh(&msk->join_list_lock);
+		}
+		return ret;
 	}
 	return true;
 }