On Sun, 2016-06-12 at 20:43 +0800, Su Xuemin wrote:
> From: "Su, Xuemin" <s...@chinanetcenter.com>
...

> Signed-off-by: Su, Xuemin <s...@chinanetcenter.com>
> Signed-off-by: Eric Dumazet <eduma...@google.com>
> ---

First, I want to thank you for this very high quality submission,
especially if this is your first linux kernel patch.

I have one additional comment to make :



>               if (score > badness) {
>                       reuseport = sk->sk_reuseport;
> @@ -556,14 +510,20 @@ struct sock *__udp4_lib_lookup(struct net *net, __be32 
> saddr,
>                                         daddr, hnum, dif,
>                                         hslot2, slot2, skb);
>               if (!result) {
> +                     unsigned int old = hash2;
>                       hash2 = udp4_portaddr_hash(net, htonl(INADDR_ANY), 
> hnum);
> +
> +                     /* avoid search the same slot again. */
> +                     if (unlikely(old == hash2))
> +                             return result;
> +

Technically speaking, what matters is the slot, not the hash value
(32bit)

So I would save in old, slot2

>                       slot2 = hash2 & udptable->mask;

And here perform the check
                        if (unlikely(slot2 != old_slot))
                                return result;

>                       hslot2 = &udptable->hash2[slot2];
>                       if (hslot->count < hslot2->count)
>                               goto begin;


(Same remark applies in IPv6)

Thanks !


Reply via email to