aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@redhat.com>2015-03-27 17:14:22 -0400
committerDavid S. Miller <davem@davemloft.net>2015-03-31 13:18:56 -0400
commit6e47d6caff9e8af6db0741ddbd260bdd36d24c13 (patch)
tree668bcba1529c40c0117c26a10d329d28378a54ef /net
parentad88d05136386de3584867091a51927eab18dc39 (diff)
fib_trie: Cleanup ip_fib_net_exit code path
While fixing a recent issue I noticed that we are doing some unnecessary work inside the loop for ip_fib_net_exit. As such I am pulling out the initialization to NULL for the locally stored fib_local, fib_main, and fib_default. In addition I am restoring the original code for flushing the table as there is no need to split up the fib_table_flush and hlist_del work since the code for packing the tnodes with multiple key vectors was dropped. Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/fib_frontend.c29
1 files changed, 7 insertions, 22 deletions
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index 767120111d90..718b0a16ea40 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -1176,35 +1176,20 @@ static void ip_fib_net_exit(struct net *net)
1176 1176
1177 rtnl_lock(); 1177 rtnl_lock();
1178 1178
1179#ifdef CONFIG_IP_MULTIPLE_TABLES
1180 RCU_INIT_POINTER(net->ipv4.fib_local, NULL);
1181 RCU_INIT_POINTER(net->ipv4.fib_main, NULL);
1182 RCU_INIT_POINTER(net->ipv4.fib_default, NULL);
1183#endif
1184
1179 for (i = 0; i < FIB_TABLE_HASHSZ; i++) { 1185 for (i = 0; i < FIB_TABLE_HASHSZ; i++) {
1180 struct hlist_head *head = &net->ipv4.fib_table_hash[i]; 1186 struct hlist_head *head = &net->ipv4.fib_table_hash[i];
1181 struct hlist_node *tmp; 1187 struct hlist_node *tmp;
1182 struct fib_table *tb; 1188 struct fib_table *tb;
1183 1189
1184 /* this is done in two passes as flushing the table could
1185 * cause it to be reallocated in order to accommodate new
1186 * tnodes at the root as the table shrinks.
1187 */
1188 hlist_for_each_entry_safe(tb, tmp, head, tb_hlist)
1189 fib_table_flush(tb);
1190
1191 hlist_for_each_entry_safe(tb, tmp, head, tb_hlist) { 1190 hlist_for_each_entry_safe(tb, tmp, head, tb_hlist) {
1192#ifdef CONFIG_IP_MULTIPLE_TABLES
1193 switch (tb->tb_id) {
1194 case RT_TABLE_LOCAL:
1195 RCU_INIT_POINTER(net->ipv4.fib_local, NULL);
1196 break;
1197 case RT_TABLE_MAIN:
1198 RCU_INIT_POINTER(net->ipv4.fib_main, NULL);
1199 break;
1200 case RT_TABLE_DEFAULT:
1201 RCU_INIT_POINTER(net->ipv4.fib_default, NULL);
1202 break;
1203 default:
1204 break;
1205 }
1206#endif
1207 hlist_del(&tb->tb_hlist); 1191 hlist_del(&tb->tb_hlist);
1192 fib_table_flush(tb);
1208 fib_free_table(tb); 1193 fib_free_table(tb);
1209 } 1194 }
1210 } 1195 }