Skip to content

Commit

Permalink
[IPV4]: fib hash|trie initialization
Browse files Browse the repository at this point in the history
Initialization of the slab cache's should be done when IP is
initialized to make sure of available memory, and that code can be
marked __init.

Signed-off-by: Stephen Hemminger <stephen.hemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Stephen Hemminger authored and David S. Miller committed Jan 28, 2008
1 parent d717a9a commit 7f9b805
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 26 deletions.
5 changes: 3 additions & 2 deletions include/net/ip_fib.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,9 @@ extern int fib_sync_down(__be32 local, struct net_device *dev, int force);
extern int fib_sync_up(struct net_device *dev);
extern __be32 __fib_res_prefsrc(struct fib_result *res);

/* Exported by fib_hash.c */
extern struct fib_table *fib_hash_init(u32 id);
/* Exported by fib_{hash|trie}.c */
extern void fib_hash_init(void);
extern struct fib_table *fib_hash_table(u32 id);

static inline void fib_combine_itag(u32 *itag, struct fib_result *res)
{
Expand Down
9 changes: 6 additions & 3 deletions net/ipv4/fib_frontend.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ static int __net_init fib4_rules_init(struct net *net)
{
struct fib_table *local_table, *main_table;

local_table = fib_hash_init(RT_TABLE_LOCAL);
local_table = fib_hash_table(RT_TABLE_LOCAL);
if (local_table == NULL)
return -ENOMEM;

main_table = fib_hash_init(RT_TABLE_MAIN);
main_table = fib_hash_table(RT_TABLE_MAIN);
if (main_table == NULL)
goto fail;

Expand All @@ -83,7 +83,8 @@ struct fib_table *fib_new_table(struct net *net, u32 id)
tb = fib_get_table(net, id);
if (tb)
return tb;
tb = fib_hash_init(id);

tb = fib_hash_table(id);
if (!tb)
return NULL;
h = id & (FIB_TABLE_HASHSZ - 1);
Expand Down Expand Up @@ -1042,6 +1043,8 @@ void __init ip_fib_init(void)
register_pernet_subsys(&fib_net_ops);
register_netdevice_notifier(&fib_netdev_notifier);
register_inetaddr_notifier(&fib_inetaddr_notifier);

fib_hash_init();
}

EXPORT_SYMBOL(inet_addr_type);
Expand Down
24 changes: 11 additions & 13 deletions net/ipv4/fib_hash.c
Original file line number Diff line number Diff line change
Expand Up @@ -747,21 +747,19 @@ static int fn_hash_dump(struct fib_table *tb, struct sk_buff *skb, struct netlin
return skb->len;
}

struct fib_table *fib_hash_init(u32 id)
void __init fib_hash_init(void)
{
struct fib_table *tb;
fn_hash_kmem = kmem_cache_create("ip_fib_hash", sizeof(struct fib_node),
0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);

fn_alias_kmem = kmem_cache_create("ip_fib_alias", sizeof(struct fib_alias),
0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);

}

if (fn_hash_kmem == NULL)
fn_hash_kmem = kmem_cache_create("ip_fib_hash",
sizeof(struct fib_node),
0, SLAB_HWCACHE_ALIGN,
NULL);

if (fn_alias_kmem == NULL)
fn_alias_kmem = kmem_cache_create("ip_fib_alias",
sizeof(struct fib_alias),
0, SLAB_HWCACHE_ALIGN,
NULL);
struct fib_table *fib_hash_table(u32 id)
{
struct fib_table *tb;

tb = kmalloc(sizeof(struct fib_table) + sizeof(struct fn_hash),
GFP_KERNEL);
Expand Down
16 changes: 8 additions & 8 deletions net/ipv4/fib_trie.c
Original file line number Diff line number Diff line change
Expand Up @@ -1926,19 +1926,19 @@ static int fn_trie_dump(struct fib_table *tb, struct sk_buff *skb, struct netlin
return -1;
}

/* Fix more generic FIB names for init later */
void __init fib_hash_init(void)
{
fn_alias_kmem = kmem_cache_create("ip_fib_alias", sizeof(struct fib_alias),
0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
}

struct fib_table *fib_hash_init(u32 id)

/* Fix more generic FIB names for init later */
struct fib_table *fib_hash_table(u32 id)
{
struct fib_table *tb;
struct trie *t;

if (fn_alias_kmem == NULL)
fn_alias_kmem = kmem_cache_create("ip_fib_alias",
sizeof(struct fib_alias),
0, SLAB_HWCACHE_ALIGN,
NULL);

tb = kmalloc(sizeof(struct fib_table) + sizeof(struct trie),
GFP_KERNEL);
if (tb == NULL)
Expand Down

0 comments on commit 7f9b805

Please sign in to comment.