diff mbox series

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

Message ID 69586a14bcb482fca957f4be899e0d5412c31258.1583334096.git.pabeni@redhat.com
State Superseded, archived
Delegated to: Mat Martineau
Headers show
Series pm netlink: followup and fixes | expand

Commit Message

Paolo Abeni March 4, 2020, 3:02 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;
 }