* [PATCH v2 mptcp-next] mptcp: use fast lock for subflows when possible.
@ 2021-05-27 16:11 Paolo Abeni
2021-05-28 0:05 ` Mat Martineau
2021-06-07 15:07 ` Matthieu Baerts
0 siblings, 2 replies; 3+ messages in thread
From: Paolo Abeni @ 2021-05-27 16:11 UTC (permalink / raw)
To: mptcp
There are a bunch of callsite where the ssk socket
lock is acquired using the full-blown version eligible for
the fast variant. Let's move to the latter.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
v1 -> v2:
- add more chunks in protocol.c
---
net/mptcp/pm_netlink.c | 10 ++++++----
net/mptcp/protocol.c | 15 +++++++++------
2 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 09722598994d..d4732a4f223e 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -540,6 +540,7 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk)
subflow = list_first_entry_or_null(&msk->conn_list, typeof(*subflow), node);
if (subflow) {
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+ bool slow;
spin_unlock_bh(&msk->pm.lock);
pr_debug("send ack for %s%s%s",
@@ -547,9 +548,9 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk)
mptcp_pm_should_add_signal_ipv6(msk) ? " [ipv6]" : "",
mptcp_pm_should_add_signal_port(msk) ? " [port]" : "");
- lock_sock(ssk);
+ slow = lock_sock_fast(ssk);
tcp_send_ack(ssk);
- release_sock(ssk);
+ unlock_sock_fast(ssk, slow);
spin_lock_bh(&msk->pm.lock);
}
}
@@ -566,6 +567,7 @@ int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
struct sock *sk = (struct sock *)msk;
struct mptcp_addr_info local;
+ bool slow;
local_address((struct sock_common *)ssk, &local);
if (!addresses_equal(&local, addr, addr->port))
@@ -578,9 +580,9 @@ int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,
spin_unlock_bh(&msk->pm.lock);
pr_debug("send ack for mp_prio");
- lock_sock(ssk);
+ slow = lock_sock_fast(ssk);
tcp_send_ack(ssk);
- release_sock(ssk);
+ unlock_sock_fast(ssk, slow);
spin_lock_bh(&msk->pm.lock);
return 0;
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 785e74c13b3c..786f09d83d35 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -433,23 +433,25 @@ static void mptcp_send_ack(struct mptcp_sock *msk)
mptcp_for_each_subflow(msk, subflow) {
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+ bool slow;
- lock_sock(ssk);
+ slow = lock_sock_fast(ssk);
if (tcp_can_send_ack(ssk))
tcp_send_ack(ssk);
- release_sock(ssk);
+ unlock_sock_fast(ssk, slow);
}
}
static bool mptcp_subflow_cleanup_rbuf(struct sock *ssk)
{
+ bool slow;
int ret;
- lock_sock(ssk);
+ slow = lock_sock_fast(ssk);
ret = tcp_can_send_ack(ssk);
if (ret)
tcp_cleanup_rbuf(ssk, 1);
- release_sock(ssk);
+ unlock_sock_fast(ssk, slow);
return ret;
}
@@ -2252,13 +2254,14 @@ static void mptcp_check_fastclose(struct mptcp_sock *msk)
list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) {
struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow);
+ bool slow;
- lock_sock(tcp_sk);
+ slow = lock_sock_fast(tcp_sk);
if (tcp_sk->sk_state != TCP_CLOSE) {
tcp_send_active_reset(tcp_sk, GFP_ATOMIC);
tcp_set_state(tcp_sk, TCP_CLOSE);
}
- release_sock(tcp_sk);
+ unlock_sock_fast(tcp_sk, slow);
}
inet_sk_state_store(sk, TCP_CLOSE);
--
2.26.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2 mptcp-next] mptcp: use fast lock for subflows when possible.
2021-05-27 16:11 [PATCH v2 mptcp-next] mptcp: use fast lock for subflows when possible Paolo Abeni
@ 2021-05-28 0:05 ` Mat Martineau
2021-06-07 15:07 ` Matthieu Baerts
1 sibling, 0 replies; 3+ messages in thread
From: Mat Martineau @ 2021-05-28 0:05 UTC (permalink / raw)
To: Paolo Abeni; +Cc: mptcp
On Thu, 27 May 2021, Paolo Abeni wrote:
> There are a bunch of callsite where the ssk socket
> lock is acquired using the full-blown version eligible for
> the fast variant. Let's move to the latter.
>
> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
> ---
> v1 -> v2:
> - add more chunks in protocol.c
Looks good, thanks Paolo.
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
> ---
> net/mptcp/pm_netlink.c | 10 ++++++----
> net/mptcp/protocol.c | 15 +++++++++------
> 2 files changed, 15 insertions(+), 10 deletions(-)
>
> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
> index 09722598994d..d4732a4f223e 100644
> --- a/net/mptcp/pm_netlink.c
> +++ b/net/mptcp/pm_netlink.c
> @@ -540,6 +540,7 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk)
> subflow = list_first_entry_or_null(&msk->conn_list, typeof(*subflow), node);
> if (subflow) {
> struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
> + bool slow;
>
> spin_unlock_bh(&msk->pm.lock);
> pr_debug("send ack for %s%s%s",
> @@ -547,9 +548,9 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk)
> mptcp_pm_should_add_signal_ipv6(msk) ? " [ipv6]" : "",
> mptcp_pm_should_add_signal_port(msk) ? " [port]" : "");
>
> - lock_sock(ssk);
> + slow = lock_sock_fast(ssk);
> tcp_send_ack(ssk);
> - release_sock(ssk);
> + unlock_sock_fast(ssk, slow);
> spin_lock_bh(&msk->pm.lock);
> }
> }
> @@ -566,6 +567,7 @@ int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,
> struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
> struct sock *sk = (struct sock *)msk;
> struct mptcp_addr_info local;
> + bool slow;
>
> local_address((struct sock_common *)ssk, &local);
> if (!addresses_equal(&local, addr, addr->port))
> @@ -578,9 +580,9 @@ int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,
>
> spin_unlock_bh(&msk->pm.lock);
> pr_debug("send ack for mp_prio");
> - lock_sock(ssk);
> + slow = lock_sock_fast(ssk);
> tcp_send_ack(ssk);
> - release_sock(ssk);
> + unlock_sock_fast(ssk, slow);
> spin_lock_bh(&msk->pm.lock);
>
> return 0;
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 785e74c13b3c..786f09d83d35 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -433,23 +433,25 @@ static void mptcp_send_ack(struct mptcp_sock *msk)
>
> mptcp_for_each_subflow(msk, subflow) {
> struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
> + bool slow;
>
> - lock_sock(ssk);
> + slow = lock_sock_fast(ssk);
> if (tcp_can_send_ack(ssk))
> tcp_send_ack(ssk);
> - release_sock(ssk);
> + unlock_sock_fast(ssk, slow);
> }
> }
>
> static bool mptcp_subflow_cleanup_rbuf(struct sock *ssk)
> {
> + bool slow;
> int ret;
>
> - lock_sock(ssk);
> + slow = lock_sock_fast(ssk);
> ret = tcp_can_send_ack(ssk);
> if (ret)
> tcp_cleanup_rbuf(ssk, 1);
> - release_sock(ssk);
> + unlock_sock_fast(ssk, slow);
> return ret;
> }
>
> @@ -2252,13 +2254,14 @@ static void mptcp_check_fastclose(struct mptcp_sock *msk)
>
> list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) {
> struct sock *tcp_sk = mptcp_subflow_tcp_sock(subflow);
> + bool slow;
>
> - lock_sock(tcp_sk);
> + slow = lock_sock_fast(tcp_sk);
> if (tcp_sk->sk_state != TCP_CLOSE) {
> tcp_send_active_reset(tcp_sk, GFP_ATOMIC);
> tcp_set_state(tcp_sk, TCP_CLOSE);
> }
> - release_sock(tcp_sk);
> + unlock_sock_fast(tcp_sk, slow);
> }
>
> inet_sk_state_store(sk, TCP_CLOSE);
> --
> 2.26.3
>
>
>
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2 mptcp-next] mptcp: use fast lock for subflows when possible.
2021-05-27 16:11 [PATCH v2 mptcp-next] mptcp: use fast lock for subflows when possible Paolo Abeni
2021-05-28 0:05 ` Mat Martineau
@ 2021-06-07 15:07 ` Matthieu Baerts
1 sibling, 0 replies; 3+ messages in thread
From: Matthieu Baerts @ 2021-06-07 15:07 UTC (permalink / raw)
To: Paolo Abeni, Mat Martineau; +Cc: mptcp
Hi Paolo, Mat,
On 27/05/2021 18:11, Paolo Abeni wrote:
> There are a bunch of callsite where the ssk socket
> lock is acquired using the full-blown version eligible for
> the fast variant. Let's move to the latter.
>
> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Thank you for the patch and the review!
Now in our tree (without the dot at the end of the commit title ;-) )
- 60aec9b8f645: mptcp: use fast lock for subflows when possible
- Results: b01ac56d4eb3..e6629296aed2
Builds and tests are now in progress:
https://cirrus-ci.com/github/multipath-tcp/mptcp_net-next/export/20210607T150702
https://github.com/multipath-tcp/mptcp_net-next/actions/workflows/build-validation.yml?query=branch:export/20210607T150702
Cheers,
Matt
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-06-07 15:07 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-27 16:11 [PATCH v2 mptcp-next] mptcp: use fast lock for subflows when possible Paolo Abeni
2021-05-28 0:05 ` Mat Martineau
2021-06-07 15:07 ` Matthieu Baerts
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.