|
@@ -3403,7 +3403,7 @@ void free_buffer_head(struct buffer_head *bh)
|
|
|
}
|
|
|
EXPORT_SYMBOL(free_buffer_head);
|
|
|
|
|
|
-static void buffer_exit_cpu(int cpu)
|
|
|
+static int buffer_exit_cpu_dead(unsigned int cpu)
|
|
|
{
|
|
|
int i;
|
|
|
struct bh_lru *b = &per_cpu(bh_lrus, cpu);
|
|
@@ -3414,14 +3414,7 @@ static void buffer_exit_cpu(int cpu)
|
|
|
}
|
|
|
this_cpu_add(bh_accounting.nr, per_cpu(bh_accounting, cpu).nr);
|
|
|
per_cpu(bh_accounting, cpu).nr = 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int buffer_cpu_notify(struct notifier_block *self,
|
|
|
- unsigned long action, void *hcpu)
|
|
|
-{
|
|
|
- if (action == CPU_DEAD || action == CPU_DEAD_FROZEN)
|
|
|
- buffer_exit_cpu((unsigned long)hcpu);
|
|
|
- return NOTIFY_OK;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -3471,6 +3464,7 @@ EXPORT_SYMBOL(bh_submit_read);
|
|
|
void __init buffer_init(void)
|
|
|
{
|
|
|
unsigned long nrpages;
|
|
|
+ int ret;
|
|
|
|
|
|
bh_cachep = kmem_cache_create("buffer_head",
|
|
|
sizeof(struct buffer_head), 0,
|
|
@@ -3483,5 +3477,7 @@ void __init buffer_init(void)
|
|
|
*/
|
|
|
nrpages = (nr_free_buffer_pages() * 10) / 100;
|
|
|
max_buffer_heads = nrpages * (PAGE_SIZE / sizeof(struct buffer_head));
|
|
|
- hotcpu_notifier(buffer_cpu_notify, 0);
|
|
|
+ ret = cpuhp_setup_state_nocalls(CPUHP_FS_BUFF_DEAD, "fs/buffer:dead",
|
|
|
+ NULL, buffer_exit_cpu_dead);
|
|
|
+ WARN_ON(ret < 0);
|
|
|
}
|