Skip to content

Commit

Permalink
tcp_metrics: hash table allocation cleanup
Browse files Browse the repository at this point in the history
After commit 098a697 ("tcp_metrics: Use a single hash table
for all network namespaces.") we can avoid calling tcp_net_metrics_init()
for each new netns.

Instead, rename tcp_net_metrics_init() to tcp_metrics_hash_alloc(),
and move it to __init section.

Also move tcpmhash_entries to __initdata section.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://lore.kernel.org/r/20230803135417.2716879-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Eric Dumazet authored and Jakub Kicinski committed Aug 4, 2023
1 parent faa9039 commit c4a6b2d
Showing 1 changed file with 7 additions and 12 deletions.
19 changes: 7 additions & 12 deletions net/ipv4/tcp_metrics.c
Original file line number Diff line number Diff line change
Expand Up @@ -990,7 +990,7 @@ static struct genl_family tcp_metrics_nl_family __ro_after_init = {
.resv_start_op = TCP_METRICS_CMD_DEL + 1,
};

static unsigned int tcpmhash_entries;
static unsigned int tcpmhash_entries __initdata;
static int __init set_tcpmhash_entries(char *str)
{
ssize_t ret;
Expand All @@ -1006,15 +1006,11 @@ static int __init set_tcpmhash_entries(char *str)
}
__setup("tcpmhash_entries=", set_tcpmhash_entries);

static int __net_init tcp_net_metrics_init(struct net *net)
static void __init tcp_metrics_hash_alloc(void)
{
unsigned int slots = tcpmhash_entries;
size_t size;
unsigned int slots;

if (!net_eq(net, &init_net))
return 0;

slots = tcpmhash_entries;
if (!slots) {
if (totalram_pages() >= 128 * 1024)
slots = 16 * 1024;
Expand All @@ -1027,9 +1023,7 @@ static int __net_init tcp_net_metrics_init(struct net *net)

tcp_metrics_hash = kvzalloc(size, GFP_KERNEL);
if (!tcp_metrics_hash)
return -ENOMEM;

return 0;
panic("Could not allocate the tcp_metrics hash table\n");
}

static void __net_exit tcp_net_metrics_exit_batch(struct list_head *net_exit_list)
Expand All @@ -1038,17 +1032,18 @@ static void __net_exit tcp_net_metrics_exit_batch(struct list_head *net_exit_lis
}

static __net_initdata struct pernet_operations tcp_net_metrics_ops = {
.init = tcp_net_metrics_init,
.exit_batch = tcp_net_metrics_exit_batch,
};

void __init tcp_metrics_init(void)
{
int ret;

tcp_metrics_hash_alloc();

ret = register_pernet_subsys(&tcp_net_metrics_ops);
if (ret < 0)
panic("Could not allocate the tcp_metrics hash table\n");
panic("Could not register tcp_net_metrics_ops\n");

ret = genl_register_family(&tcp_metrics_nl_family);
if (ret < 0)
Expand Down

0 comments on commit c4a6b2d

Please sign in to comment.