From: Kuniyuki Iwashima <kuniyu@amazon.com>
To: <edumazet@google.com>
Cc: <davem@davemloft.net>, <dsahern@kernel.org>,
<eric.dumazet@gmail.com>, <kuba@kernel.org>, <kuniyu@amazon.com>,
<netdev@vger.kernel.org>, <pabeni@redhat.com>
Subject: Re: [PATCH net 5/6] tcp_metrics: annotate data-races around tm->tcpm_net
Date: Wed, 2 Aug 2023 10:42:45 -0700 [thread overview]
Message-ID: <20230802174245.53590-1-kuniyu@amazon.com> (raw)
In-Reply-To: <20230802131500.1478140-6-edumazet@google.com>
From: Eric Dumazet <edumazet@google.com>
Date: Wed, 2 Aug 2023 13:14:59 +0000
> tm->tcpm_net can be read or written locklessly.
>
> Instead of changing write_pnet() and read_pnet() and potentially
> hurt performance, add the needed READ_ONCE()/WRITE_ONCE()
> in tm_net() and tcpm_new().
>
> Fixes: 849e8a0ca8d5 ("tcp_metrics: Add a field tcpm_net and verify it matches on lookup")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
> ---
> net/ipv4/tcp_metrics.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
> index fd4ab7a51cef210005146dfbc3235a2db717a44f..4fd274836a48f73d0b1206adfa14c17c3b28bc30 100644
> --- a/net/ipv4/tcp_metrics.c
> +++ b/net/ipv4/tcp_metrics.c
> @@ -40,7 +40,7 @@ struct tcp_fastopen_metrics {
>
> struct tcp_metrics_block {
> struct tcp_metrics_block __rcu *tcpm_next;
> - possible_net_t tcpm_net;
> + struct net *tcpm_net;
> struct inetpeer_addr tcpm_saddr;
> struct inetpeer_addr tcpm_daddr;
> unsigned long tcpm_stamp;
> @@ -51,9 +51,10 @@ struct tcp_metrics_block {
> struct rcu_head rcu_head;
> };
>
> -static inline struct net *tm_net(struct tcp_metrics_block *tm)
> +static inline struct net *tm_net(const struct tcp_metrics_block *tm)
> {
> - return read_pnet(&tm->tcpm_net);
> + /* Paired with the WRITE_ONCE() in tcpm_new() */
> + return READ_ONCE(tm->tcpm_net);
> }
>
> static bool tcp_metric_locked(struct tcp_metrics_block *tm,
> @@ -197,7 +198,9 @@ static struct tcp_metrics_block *tcpm_new(struct dst_entry *dst,
> if (!tm)
> goto out_unlock;
> }
> - write_pnet(&tm->tcpm_net, net);
> + /* Paired with the READ_ONCE() in tm_net() */
> + WRITE_ONCE(tm->tcpm_net, net);
> +
> tm->tcpm_saddr = *saddr;
> tm->tcpm_daddr = *daddr;
>
> --
> 2.41.0.640.ga95def55d0-goog
next prev parent reply other threads:[~2023-08-02 17:51 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-02 13:14 [PATCH net 0/6] tcp_metrics: series of fixes Eric Dumazet
2023-08-02 13:14 ` [PATCH net 1/6] tcp_metrics: fix addr_same() helper Eric Dumazet
2023-08-02 15:04 ` David Ahern
2023-08-02 17:26 ` Kuniyuki Iwashima
2023-08-02 13:14 ` [PATCH net 2/6] tcp_metrics: annotate data-races around tm->tcpm_stamp Eric Dumazet
2023-08-02 15:06 ` David Ahern
2023-08-02 17:30 ` Kuniyuki Iwashima
2023-08-02 13:14 ` [PATCH net 3/6] tcp_metrics: annotate data-races around tm->tcpm_lock Eric Dumazet
2023-08-02 15:07 ` David Ahern
2023-08-02 17:35 ` Kuniyuki Iwashima
2023-08-02 13:14 ` [PATCH net 4/6] tcp_metrics: annotate data-races around tm->tcpm_vals[] Eric Dumazet
2023-08-02 15:09 ` David Ahern
2023-08-02 17:37 ` Kuniyuki Iwashima
2023-08-02 13:14 ` [PATCH net 5/6] tcp_metrics: annotate data-races around tm->tcpm_net Eric Dumazet
2023-08-02 15:12 ` David Ahern
2023-08-02 17:42 ` Kuniyuki Iwashima [this message]
2023-08-02 13:15 ` [PATCH net 6/6] tcp_metrics: fix data-race in tcpm_suck_dst() vs fastopen Eric Dumazet
2023-08-02 17:47 ` Kuniyuki Iwashima
2023-08-03 18:10 ` [PATCH net 0/6] tcp_metrics: series of fixes patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230802174245.53590-1-kuniyu@amazon.com \
--to=kuniyu@amazon.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.