From: Eric Dumazet Instead of using for_each_cpu(i), we can use for_each_online_cpu(i). When a CPU goes offline (ie removed from online map), it might have a non null bh_accounting.nr, so this patch adds a transfer of this counter to an online CPU counter. We already have a hotcpu_notifier, (function buffer_cpu_notify()), where we can do this bh_accounting. Signed-off-by: Eric Dumazet Signed-off-by: Andrew Morton --- fs/buffer.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletion(-) diff -puN fs/buffer.c~hotplug_cpu-avoid-hitting-too-many-cachelines-in-recalc_bh_state fs/buffer.c --- devel/fs/buffer.c~hotplug_cpu-avoid-hitting-too-many-cachelines-in-recalc_bh_state 2006-02-10 13:17:50.000000000 -0800 +++ devel-akpm/fs/buffer.c 2006-02-10 13:17:50.000000000 -0800 @@ -3138,7 +3138,7 @@ static void recalc_bh_state(void) if (__get_cpu_var(bh_accounting).ratelimit++ < 4096) return; __get_cpu_var(bh_accounting).ratelimit = 0; - for_each_cpu(i) + for_each_online_cpu(i) tot += per_cpu(bh_accounting, i).nr; buffer_heads_over_limit = (tot > max_buffer_heads); } @@ -3187,6 +3187,9 @@ static void buffer_exit_cpu(int cpu) brelse(b->bhs[i]); b->bhs[i] = NULL; } + get_cpu_var(bh_accounting).nr += per_cpu(bh_accounting, cpu).nr; + per_cpu(bh_accounting, cpu).nr = 0; + put_cpu_var(bh_accounting); } static int buffer_cpu_notify(struct notifier_block *self, _