summaryrefslogtreecommitdiffstats
path: root/net/mptcp
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2021-02-12 15:59:57 -0800
committerDavid S. Miller <davem@davemloft.net>2021-02-12 16:31:45 -0800
commitb263b0d7d60baecda3c840a0703bb6d511f7ae2d (patch)
treee5aeb93512e8c1d741835b0852a39e4d609bce30 /net/mptcp
parent40947e13997a1cba4e875893ca6e5d5e61a0689d (diff)
downloadlinux-b263b0d7d60baecda3c840a0703bb6d511f7ae2d.tar.gz
linux-b263b0d7d60baecda3c840a0703bb6d511f7ae2d.tar.bz2
linux-b263b0d7d60baecda3c840a0703bb6d511f7ae2d.zip
mptcp: move subflow close loop after sk close check
In case mptcp socket is already dead the entire mptcp socket will be freed. We can avoid the close check in this case. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mptcp')
-rw-r--r--net/mptcp/protocol.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 267c5521692d..1b8be2bf6b43 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2246,9 +2246,6 @@ static void mptcp_worker(struct work_struct *work)
mptcp_check_fastclose(msk);
- if (test_and_clear_bit(MPTCP_WORK_CLOSE_SUBFLOW, &msk->flags))
- __mptcp_close_subflow(msk);
-
if (msk->pm.status)
mptcp_pm_nl_work(msk);
@@ -2270,6 +2267,9 @@ static void mptcp_worker(struct work_struct *work)
goto unlock;
}
+ if (test_and_clear_bit(MPTCP_WORK_CLOSE_SUBFLOW, &msk->flags))
+ __mptcp_close_subflow(msk);
+
if (!test_and_clear_bit(MPTCP_WORK_RTX, &msk->flags))
goto unlock;