diff options
author | Paolo Abeni <pabeni@redhat.com> | 2021-08-27 03:44:54 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-08-27 11:45:07 +0300 |
commit | 9758f40e90f77e457dd4edef1ca506006d7f471a (patch) | |
tree | 604e04b9280e2c265baa5b8a0c9b2c4dfc6e1e15 /net/mptcp/protocol.c | |
parent | f6c2ef59bcc7e1fbe4ea6f9de7f6e0df178d5882 (diff) | |
download | linux-9758f40e90f77e457dd4edef1ca506006d7f471a.tar.xz |
mptcp: make the locking tx schema more readable
Florian noted the locking schema used by __mptcp_push_pending()
is hard to follow, let's add some more descriptive comments
and drop an unneeded and confusing check.
Suggested-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
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/protocol.c')
-rw-r--r-- | net/mptcp/protocol.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 1a408395e78f..ade648c3512b 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1515,15 +1515,19 @@ void __mptcp_push_pending(struct sock *sk, unsigned int flags) mptcp_flush_join_list(msk); ssk = mptcp_subflow_get_send(msk); - /* try to keep the subflow socket lock across - * consecutive xmit on the same socket + /* First check. If the ssk has changed since + * the last round, release prev_ssk */ if (ssk != prev_ssk && prev_ssk) mptcp_push_release(sk, prev_ssk, &info); if (!ssk) goto out; - if (ssk != prev_ssk || !prev_ssk) + /* Need to lock the new subflow only if different + * from the previous one, otherwise we are still + * helding the relevant lock + */ + if (ssk != prev_ssk) lock_sock(ssk); /* keep it simple and always provide a new skb for the |