struct hlist_node list;
char name[IFNAMSIZ];
unsigned int refcnt;
- spinlock_t lock;
struct gnet_estimator params;
- struct gnet_stats_rate_est rstats;
- struct gnet_stats_basic_packed bstats;
+ struct rcu_head rcu;
};
extern struct xt_rateest *xt_rateest_lookup(const char *name);
kfree_skb(skb);
return 0;
}
- skb_dst_set_noref(skb, &rt->u.dst);
- dst_hold(&rt->dst);
- skb_dst_set(skb, &rt->dst);
++ skb_dst_set_noref(skb, &rt->dst);
skb->dev = nf_bridge->physindev;
nf_bridge_update_protocol(skb);
kfree_skb(skb);
return 0;
}
- skb_dst_set_noref(skb, &rt->u.dst);
- dst_hold(&rt->dst);
- skb_dst_set(skb, &rt->dst);
++ skb_dst_set_noref(skb, &rt->dst);
}
skb->dev = nf_bridge->physindev;
goto err_extend;
#endif
/* Set up fake conntrack: to never be deleted, not in any hashes */
- write_pnet(&nf_conntrack_untracked.ct_net, &init_net);
- atomic_set(&nf_conntrack_untracked.ct_general.use, 1);
+ for_each_possible_cpu(cpu) {
+ struct nf_conn *ct = &per_cpu(nf_conntrack_untracked, cpu);
-
+ write_pnet(&ct->ct_net, &init_net);
+ atomic_set(&ct->ct_general.use, 1);
+ }
/* - and look it like as a confirmed connection */
- set_bit(IPS_CONFIRMED_BIT, &nf_conntrack_untracked.status);
-
+ nf_ct_untracked_status_or(IPS_CONFIRMED | IPS_UNTRACKED);
return 0;
#ifdef CONFIG_NF_CONNTRACK_ZONES