diff options
author | Denis V. Lunev <den@openvz.org> | 2008-01-20 19:46:41 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:08:13 -0500 |
commit | 9e3a548781fc1c0da617fc65769a515f074be740 (patch) | |
tree | fee75c4308276a37e6f1c0f55335332463bb3e7e /net/core | |
parent | 035923833369e4da5d3c4ad0700bc7c367a0fa37 (diff) |
[NETNS]: FIB rules API cleanup.
Remove struct net from fib_rules_register(unregister)/notify_change
paths and diet code size a bit.
add/remove: 0/0 grow/shrink: 10/12 up/down: 35/-100 (-65)
function old new delta
notify_rule_change 273 280 +7
trie_show_stats 471 475 +4
fn_trie_delete 473 477 +4
fib_rules_unregister 144 148 +4
fib4_rule_compare 119 123 +4
resize 2842 2845 +3
fn_trie_select_default 515 518 +3
inet_sk_rebuild_header 836 838 +2
fib_trie_seq_show 764 766 +2
__devinet_sysctl_register 276 278 +2
fn_trie_lookup 1124 1123 -1
ip_fib_check_default 133 131 -2
devinet_conf_sysctl 223 221 -2
snmp_fold_field 126 123 -3
fn_trie_insert 2091 2086 -5
inet_create 876 870 -6
fib4_rules_init 197 191 -6
fib_sync_down 452 444 -8
inet_gso_send_check 334 325 -9
fib_create_info 3003 2991 -12
fib_nl_delrule 568 553 -15
fib_nl_newrule 883 852 -31
Signed-off-by: Denis V. Lunev <den@openvz.org>
Acked-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/fib_rules.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index 541728aa2bae..3cd4f13413f6 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
@@ -37,8 +37,7 @@ int fib_default_rule_add(struct fib_rules_ops *ops, | |||
37 | } | 37 | } |
38 | EXPORT_SYMBOL(fib_default_rule_add); | 38 | EXPORT_SYMBOL(fib_default_rule_add); |
39 | 39 | ||
40 | static void notify_rule_change(struct net *net, int event, | 40 | static void notify_rule_change(int event, struct fib_rule *rule, |
41 | struct fib_rule *rule, | ||
42 | struct fib_rules_ops *ops, struct nlmsghdr *nlh, | 41 | struct fib_rules_ops *ops, struct nlmsghdr *nlh, |
43 | u32 pid); | 42 | u32 pid); |
44 | 43 | ||
@@ -72,10 +71,13 @@ static void flush_route_cache(struct fib_rules_ops *ops) | |||
72 | ops->flush_cache(); | 71 | ops->flush_cache(); |
73 | } | 72 | } |
74 | 73 | ||
75 | int fib_rules_register(struct net *net, struct fib_rules_ops *ops) | 74 | int fib_rules_register(struct fib_rules_ops *ops) |
76 | { | 75 | { |
77 | int err = -EEXIST; | 76 | int err = -EEXIST; |
78 | struct fib_rules_ops *o; | 77 | struct fib_rules_ops *o; |
78 | struct net *net; | ||
79 | |||
80 | net = ops->fro_net; | ||
79 | 81 | ||
80 | if (ops->rule_size < sizeof(struct fib_rule)) | 82 | if (ops->rule_size < sizeof(struct fib_rule)) |
81 | return -EINVAL; | 83 | return -EINVAL; |
@@ -112,8 +114,9 @@ void fib_rules_cleanup_ops(struct fib_rules_ops *ops) | |||
112 | } | 114 | } |
113 | EXPORT_SYMBOL_GPL(fib_rules_cleanup_ops); | 115 | EXPORT_SYMBOL_GPL(fib_rules_cleanup_ops); |
114 | 116 | ||
115 | void fib_rules_unregister(struct net *net, struct fib_rules_ops *ops) | 117 | void fib_rules_unregister(struct fib_rules_ops *ops) |
116 | { | 118 | { |
119 | struct net *net = ops->fro_net; | ||
117 | 120 | ||
118 | spin_lock(&net->rules_mod_lock); | 121 | spin_lock(&net->rules_mod_lock); |
119 | list_del_rcu(&ops->list); | 122 | list_del_rcu(&ops->list); |
@@ -333,7 +336,7 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
333 | else | 336 | else |
334 | list_add_rcu(&rule->list, &ops->rules_list); | 337 | list_add_rcu(&rule->list, &ops->rules_list); |
335 | 338 | ||
336 | notify_rule_change(net, RTM_NEWRULE, rule, ops, nlh, NETLINK_CB(skb).pid); | 339 | notify_rule_change(RTM_NEWRULE, rule, ops, nlh, NETLINK_CB(skb).pid); |
337 | flush_route_cache(ops); | 340 | flush_route_cache(ops); |
338 | rules_ops_put(ops); | 341 | rules_ops_put(ops); |
339 | return 0; | 342 | return 0; |
@@ -423,7 +426,7 @@ static int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
423 | } | 426 | } |
424 | 427 | ||
425 | synchronize_rcu(); | 428 | synchronize_rcu(); |
426 | notify_rule_change(net, RTM_DELRULE, rule, ops, nlh, | 429 | notify_rule_change(RTM_DELRULE, rule, ops, nlh, |
427 | NETLINK_CB(skb).pid); | 430 | NETLINK_CB(skb).pid); |
428 | fib_rule_put(rule); | 431 | fib_rule_put(rule); |
429 | flush_route_cache(ops); | 432 | flush_route_cache(ops); |
@@ -561,13 +564,15 @@ static int fib_nl_dumprule(struct sk_buff *skb, struct netlink_callback *cb) | |||
561 | return skb->len; | 564 | return skb->len; |
562 | } | 565 | } |
563 | 566 | ||
564 | static void notify_rule_change(struct net *net, int event, struct fib_rule *rule, | 567 | static void notify_rule_change(int event, struct fib_rule *rule, |
565 | struct fib_rules_ops *ops, struct nlmsghdr *nlh, | 568 | struct fib_rules_ops *ops, struct nlmsghdr *nlh, |
566 | u32 pid) | 569 | u32 pid) |
567 | { | 570 | { |
571 | struct net *net; | ||
568 | struct sk_buff *skb; | 572 | struct sk_buff *skb; |
569 | int err = -ENOBUFS; | 573 | int err = -ENOBUFS; |
570 | 574 | ||
575 | net = ops->fro_net; | ||
571 | skb = nlmsg_new(fib_rule_nlmsg_size(ops, rule), GFP_KERNEL); | 576 | skb = nlmsg_new(fib_rule_nlmsg_size(ops, rule), GFP_KERNEL); |
572 | if (skb == NULL) | 577 | if (skb == NULL) |
573 | goto errout; | 578 | goto errout; |
@@ -579,6 +584,7 @@ static void notify_rule_change(struct net *net, int event, struct fib_rule *rule | |||
579 | kfree_skb(skb); | 584 | kfree_skb(skb); |
580 | goto errout; | 585 | goto errout; |
581 | } | 586 | } |
587 | |||
582 | err = rtnl_notify(skb, net, pid, ops->nlgroup, nlh, GFP_KERNEL); | 588 | err = rtnl_notify(skb, net, pid, ops->nlgroup, nlh, GFP_KERNEL); |
583 | errout: | 589 | errout: |
584 | if (err < 0) | 590 | if (err < 0) |