All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <edumazet@google.com>
To: Pietro Borrello <borrello@diag.uniroma1.it>
Cc: "David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>,
	David Ahern <dsahern@kernel.org>,
	Cristiano Giuffrida <c.giuffrida@vu.nl>,
	"Bos, H.J." <h.j.bos@vu.nl>, Jakob Koschel <jkl820.git@gmail.com>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	Kuniyuki Iwashima <kuniyu@amazon.com>
Subject: Re: [PATCH v2] inet: fix fast path in __inet_hash_connect()
Date: Fri, 13 Jan 2023 13:16:20 +0100	[thread overview]
Message-ID: <CANn89iJekPT_HsJ6vfQf=Vk8AXqgQjoU=FscBHGVSRcvdfaKDA@mail.gmail.com> (raw)
In-Reply-To: <20230112-inet_hash_connect_bind_head-v2-1-5ec926ddd985@diag.uniroma1.it>

On Fri, Jan 13, 2023 at 12:40 PM Pietro Borrello
<borrello@diag.uniroma1.it> wrote:
>
> __inet_hash_connect() has a fast path taken if sk_head(&tb->owners) is
> equal to the sk parameter.
> sk_head() returns the hlist_entry() with respect to the sk_node field.
> However entries in the tb->owners list are inserted with respect to the
> sk_bind_node field with sk_add_bind_node().
> Thus the check would never pass and the fast path never execute.
>
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
> Signed-off-by: Pietro Borrello <borrello@diag.uniroma1.it>
> ---
> Changes in v2:
> - nit: s/list_entry/hlist_entry/
> - Link to v1: https://lore.kernel.org/r/20230112-inet_hash_connect_bind_head-v1-1-7e3c770157c8@diag.uniroma1.it
> ---
>  include/net/sock.h         | 10 ++++++++++
>  net/ipv4/inet_hashtables.c |  2 +-
>  2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/include/net/sock.h b/include/net/sock.h
> index dcd72e6285b2..23fc403284db 100644
> --- a/include/net/sock.h
> +++ b/include/net/sock.h
> @@ -860,6 +860,16 @@ static inline void sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_hea
>         __sk_nulls_add_node_rcu(sk, list);
>  }
>
> +static inline struct sock *__sk_bind_head(const struct hlist_head *head)
> +{
> +       return hlist_entry(head->first, struct sock, sk_bind_node);
> +}
> +
> +static inline struct sock *sk_bind_head(const struct hlist_head *head)
> +{
> +       return hlist_empty(head) ? NULL : __sk_bind_head(head);
> +}
> +
>  static inline void __sk_del_bind_node(struct sock *sk)
>  {
>         __hlist_del(&sk->sk_bind_node);
> diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
> index d039b4e732a3..a805e086fb48 100644
> --- a/net/ipv4/inet_hashtables.c
> +++ b/net/ipv4/inet_hashtables.c
> @@ -998,7 +998,7 @@ int __inet_hash_connect(struct inet_timewait_death_row *death_row,
>                                                   hinfo->bhash_size)];
>                 tb = inet_csk(sk)->icsk_bind_hash;
>                 spin_lock_bh(&head->lock);
> -               if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) {
> +               if (sk_bind_head(&tb->owners) == sk && !sk->sk_bind_node.next) {
>                         inet_ehash_nolisten(sk, NULL, NULL);

1) Given this path was never really used, we have no coverage.

2) Given that we do not check inet_ehash_nolisten() return code here.

I would recommend _not_ adding the Fixes: tag, and target net-next tree

In fact, I would remove this dead code, and reduce complexity.

I doubt the difference is going to be noticed.
(We have to access the ehash bucket anyway)


>                         spin_unlock_bh(&head->lock);
>                         return 0;
>
> ---
> base-commit: 1b929c02afd37871d5afb9d498426f83432e71c2
> change-id: 20230112-inet_hash_connect_bind_head-8f2dc98f08b1
>
> Best regards,
> --
> Pietro Borrello <borrello@diag.uniroma1.it>

  reply	other threads:[~2023-01-13 12:22 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-13 11:39 [PATCH v2] inet: fix fast path in __inet_hash_connect() Pietro Borrello
2023-01-13 12:16 ` Eric Dumazet [this message]
2023-01-14 12:17   ` Pietro Borrello
2023-01-14 12:21     ` Eric Dumazet

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='CANn89iJekPT_HsJ6vfQf=Vk8AXqgQjoU=FscBHGVSRcvdfaKDA@mail.gmail.com' \
    --to=edumazet@google.com \
    --cc=borrello@diag.uniroma1.it \
    --cc=c.giuffrida@vu.nl \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=h.j.bos@vu.nl \
    --cc=jkl820.git@gmail.com \
    --cc=kuba@kernel.org \
    --cc=kuniyu@amazon.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=yoshfuji@linux-ipv6.org \
    /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.