net: Allow fib_rule_unregister to batch
Refactor the code so fib_rules_register always takes a template instead of the actual fib_rules_ops structure that will be used. This is required for network namespace support so 2 out of the 3 callers already do this, it allows the error handling to be made common, and it allows fib_rules_unregister to free the template for hte caller. Modify fib_rules_unregister to use call_rcu instead of syncrhonize_rcu to allw multiple namespaces to be cleaned up in the same rcu grace period. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
3a765edadb
commit
e9c5158ac2
@@ -66,6 +66,7 @@ struct fib_rules_ops {
|
||||
struct list_head rules_list;
|
||||
struct module *owner;
|
||||
struct net *fro_net;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
#define FRA_GENERIC_POLICY \
|
||||
@@ -102,7 +103,7 @@ static inline u32 frh_get_table(struct fib_rule_hdr *frh, struct nlattr **nla)
|
||||
return frh->table;
|
||||
}
|
||||
|
||||
extern int fib_rules_register(struct fib_rules_ops *);
|
||||
extern struct fib_rules_ops *fib_rules_register(struct fib_rules_ops *, struct net *);
|
||||
extern void fib_rules_unregister(struct fib_rules_ops *);
|
||||
extern void fib_rules_cleanup_ops(struct fib_rules_ops *);
|
||||
|
||||
|
Reference in New Issue
Block a user