When cleaning up unaccepted mptcp socket still laying inside
the listener queue at listener close time, such sockets will
go through a regular close, waiting for a timeout before
shutting down the subflows.
There is no need to keep the kernel resources in use for
such a possibly long time: short-circuit to fast-close.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
                goto cleanup;
        }
 
-       if (mptcp_check_readable(msk)) {
-               /* the msk has read data, do the MPTCP equivalent of TCP reset */
+       if (mptcp_check_readable(msk) || timeout < 0) {
+               /* If the msk has read data, or the caller explicitly ask it,
+                * do the MPTCP equivalent of TCP reset, aka MPTCP fastclose
+                */
                inet_sk_state_store(sk, TCP_CLOSE);
                mptcp_do_fastclose(sk);
+               timeout = 0;
        } else if (mptcp_close_state(sk)) {
                __mptcp_wr_shutdown(sk);
        }