Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Several cases of overlapping changes, except the packet scheduler conflicts which deal with the addition of the free list parameter to qdisc_enqueue(). Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -1544,6 +1544,8 @@ void nf_conntrack_cleanup_end(void)
|
||||
nf_conntrack_tstamp_fini();
|
||||
nf_conntrack_acct_fini();
|
||||
nf_conntrack_expect_fini();
|
||||
|
||||
kmem_cache_destroy(nf_conntrack_cachep);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -2946,24 +2946,20 @@ int nf_tables_bind_set(const struct nft_ctx *ctx, struct nft_set *set,
|
||||
* jumps are already validated for that chain.
|
||||
*/
|
||||
list_for_each_entry(i, &set->bindings, list) {
|
||||
if (binding->flags & NFT_SET_MAP &&
|
||||
if (i->flags & NFT_SET_MAP &&
|
||||
i->chain == binding->chain)
|
||||
goto bind;
|
||||
}
|
||||
|
||||
iter.genmask = nft_genmask_next(ctx->net);
|
||||
iter.skip = 0;
|
||||
iter.count = 0;
|
||||
iter.err = 0;
|
||||
iter.fn = nf_tables_bind_check_setelem;
|
||||
|
||||
set->ops->walk(ctx, set, &iter);
|
||||
if (iter.err < 0) {
|
||||
/* Destroy anonymous sets if binding fails */
|
||||
if (set->flags & NFT_SET_ANONYMOUS)
|
||||
nf_tables_set_destroy(ctx, set);
|
||||
|
||||
if (iter.err < 0)
|
||||
return iter.err;
|
||||
}
|
||||
}
|
||||
bind:
|
||||
binding->chain = ctx->chain;
|
||||
@@ -3192,12 +3188,13 @@ static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
if (nest == NULL)
|
||||
goto nla_put_failure;
|
||||
|
||||
args.cb = cb;
|
||||
args.skb = skb;
|
||||
args.iter.skip = cb->args[0];
|
||||
args.iter.count = 0;
|
||||
args.iter.err = 0;
|
||||
args.iter.fn = nf_tables_dump_setelem;
|
||||
args.cb = cb;
|
||||
args.skb = skb;
|
||||
args.iter.genmask = nft_genmask_cur(ctx.net);
|
||||
args.iter.skip = cb->args[0];
|
||||
args.iter.count = 0;
|
||||
args.iter.err = 0;
|
||||
args.iter.fn = nf_tables_dump_setelem;
|
||||
set->ops->walk(&ctx, set, &args.iter);
|
||||
|
||||
nla_nest_end(skb, nest);
|
||||
@@ -4284,6 +4281,7 @@ static int nf_tables_check_loops(const struct nft_ctx *ctx,
|
||||
binding->chain != chain)
|
||||
continue;
|
||||
|
||||
iter.genmask = nft_genmask_next(ctx->net);
|
||||
iter.skip = 0;
|
||||
iter.count = 0;
|
||||
iter.err = 0;
|
||||
|
||||
@@ -143,7 +143,7 @@ next_rule:
|
||||
list_for_each_entry_continue_rcu(rule, &chain->rules, list) {
|
||||
|
||||
/* This rule is not active, skip. */
|
||||
if (unlikely(rule->genmask & (1 << gencursor)))
|
||||
if (unlikely(rule->genmask & gencursor))
|
||||
continue;
|
||||
|
||||
rulenum++;
|
||||
|
||||
@@ -189,7 +189,6 @@ static void nft_hash_walk(const struct nft_ctx *ctx, const struct nft_set *set,
|
||||
struct nft_hash_elem *he;
|
||||
struct rhashtable_iter hti;
|
||||
struct nft_set_elem elem;
|
||||
u8 genmask = nft_genmask_cur(read_pnet(&set->pnet));
|
||||
int err;
|
||||
|
||||
err = rhashtable_walk_init(&priv->ht, &hti, GFP_KERNEL);
|
||||
@@ -218,7 +217,7 @@ static void nft_hash_walk(const struct nft_ctx *ctx, const struct nft_set *set,
|
||||
goto cont;
|
||||
if (nft_set_elem_expired(&he->ext))
|
||||
goto cont;
|
||||
if (!nft_set_elem_active(&he->ext, genmask))
|
||||
if (!nft_set_elem_active(&he->ext, iter->genmask))
|
||||
goto cont;
|
||||
|
||||
elem.priv = he;
|
||||
|
||||
@@ -211,7 +211,6 @@ static void nft_rbtree_walk(const struct nft_ctx *ctx,
|
||||
struct nft_rbtree_elem *rbe;
|
||||
struct nft_set_elem elem;
|
||||
struct rb_node *node;
|
||||
u8 genmask = nft_genmask_cur(read_pnet(&set->pnet));
|
||||
|
||||
spin_lock_bh(&nft_rbtree_lock);
|
||||
for (node = rb_first(&priv->root); node != NULL; node = rb_next(node)) {
|
||||
@@ -219,7 +218,7 @@ static void nft_rbtree_walk(const struct nft_ctx *ctx,
|
||||
|
||||
if (iter->count < iter->skip)
|
||||
goto cont;
|
||||
if (!nft_set_elem_active(&rbe->ext, genmask))
|
||||
if (!nft_set_elem_active(&rbe->ext, iter->genmask))
|
||||
goto cont;
|
||||
|
||||
elem.priv = rbe;
|
||||
|
||||
Reference in New Issue
Block a user