mptcp: make the locking tx schema more readable
authorPaolo Abeni <pabeni@redhat.com>
Fri, 27 Aug 2021 00:44:54 +0000 (17:44 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 27 Aug 2021 08:45:07 +0000 (09:45 +0100)
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>
net/mptcp/protocol.c

index 1a40839..ade648c 100644 (file)
@@ -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