diff options
| -rw-r--r-- | net/ipv4/fib_frontend.c | 10 | ||||
| -rw-r--r-- | net/ipv4/fib_rules.c | 11 |
2 files changed, 8 insertions, 13 deletions
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index c7d1f31650d7..42212970d735 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c @@ -1612,10 +1612,6 @@ static void ip_fib_net_exit(struct net *net) fib_free_table(tb); } } - -#ifdef CONFIG_IP_MULTIPLE_TABLES - fib4_rules_exit(net); -#endif } static int __net_init fib_net_init(struct net *net) @@ -1652,6 +1648,9 @@ out_semantics: ip_fib_net_exit(net); rtnl_net_unlock(net); +#ifdef CONFIG_IP_MULTIPLE_TABLES + fib4_rules_exit(net); +#endif kfree(net->ipv4.fib_table_hash); fib4_notifier_exit(net); goto out; @@ -1671,6 +1670,9 @@ static void __net_exit fib_net_exit_rtnl(struct net *net, static void __net_exit fib_net_exit(struct net *net) { +#ifdef CONFIG_IP_MULTIPLE_TABLES + fib4_rules_exit(net); +#endif kfree(net->ipv4.fib_table_hash); fib4_notifier_exit(net); fib4_semantics_exit(net); diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index 51f0193092f0..e068a5bace73 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c @@ -352,24 +352,17 @@ errout: static int fib4_rule_delete(struct fib_rule *rule) { struct net *net = rule->fr_net; - int err; - - /* split local/main if they are not already split */ - err = fib_unmerge(net); - if (err) - goto errout; #ifdef CONFIG_IP_ROUTE_CLASSID if (((struct fib4_rule *)rule)->tclassid) atomic_dec(&net->ipv4.fib_num_tclassid_users); #endif - net->ipv4.fib_has_custom_rules = true; if (net->ipv4.fib_rules_require_fldissect && fib_rule_requires_fldissect(rule)) net->ipv4.fib_rules_require_fldissect--; -errout: - return err; + + return 0; } static int fib4_rule_compare(struct fib_rule *rule, struct fib_rule_hdr *frh, |
