• Florian Westphal's avatar
    netfilter: nft_compat: remove flush counter optimization · 2f941622
    Florian Westphal authored
    WARNING: CPU: 1 PID: 16059 at lib/refcount.c:31 refcount_warn_saturate+0xdf/0xf
    [..]
     __nft_mt_tg_destroy+0x42/0x50 [nft_compat]
     nft_target_destroy+0x63/0x80 [nft_compat]
     nf_tables_expr_destroy+0x1b/0x30 [nf_tables]
     nf_tables_rule_destroy+0x3a/0x70 [nf_tables]
     nf_tables_exit_net+0x186/0x3d0 [nf_tables]
    
    Happens when a compat expr is destoyed from abort path.
    There is no functional impact; after this work queue is flushed
    unconditionally if its pending.
    
    This removes the waitcount optimization.  Test of repeated
    iptables-restore of a ~60k kubernetes ruleset doesn't indicate
    a slowdown.  In case the counter is needed after all for some workloads
    we can revert this and increment the refcount for the
    != NFT_PREPARE_TRANS case to avoid the increment/decrement imbalance.
    
    While at it, also flush for match case, this was an oversight
    in the original patch.
    
    Fixes: ffe8923f ("netfilter: nft_compat: make sure xtables destructors have run")
    Reported-by: default avatarkernel test robot <rong.a.chen@intel.com>
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    2f941622
nft_compat.c 22 KB