Looks good, only one more little change and we go.

On Tue, Jun 04, 2019 at 04:34:23PM +0800, xiao ruizhu wrote:
[...]
> @@ -420,8 +421,10 @@ static inline int __nf_ct_expect_check(struct 
> nf_conntrack_expect *expect)
>       }
>       h = nf_ct_expect_dst_hash(net, &expect->tuple);
>       hlist_for_each_entry_safe(i, next, &nf_ct_expect_hash[h], hnode) {
> -             if (expect_matches(i, expect)) {
> -                     if (i->class != expect->class)
> +             if ((flags & NF_CT_EXP_F_CHECK_MASTER ? true : i->master ==
> +                 expect->master) && expect_matches(i, expect)) {

Could you add a function for this? eg.

static bool nf_ct_check_master(struct nf_conntrack_expect *a,
                               struct nf_conntrack_expect *b)
{
        if (flags & NF_CT_EXP_F_CHECK_MASTER)
                return true;

        return i->master == expect->master &&
               expect_matches(i, expect);
}

Was that the intention?

I'm a bit confused with the use of the single statement branch above.

Thanks!

> +                     if (i->class != expect->class ||
> +                         i->master != expect->master)
>                               return -EALREADY;
>  
>                       if (nf_ct_remove_expect(i))

Reply via email to