diff options
| author | Andrew Morton <akpm@digeo.com> | 2002-10-29 23:31:09 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-10-29 23:31:09 -0800 |
| commit | f98bf5ff9cd852c1c041f51f32666cfdb403182f (patch) | |
| tree | 3e97bc4d854351913940543942aef3aac0ba76ee | |
| parent | 4524ea047360ef590786d832768c4076e494c08c (diff) | |
[PATCH] percpu: balance_dirty_pages ratelimit counters
Convert balance_dirty_pages_ratelimited() to use percpu storage
for the ratelimiting counters.
| -rw-r--r-- | mm/page-writeback.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index b2c0c682f847..ef42bb0738ad 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -23,6 +23,7 @@ #include <linux/backing-dev.h> #include <linux/blkdev.h> #include <linux/mpage.h> +#include <linux/percpu.h> #include <linux/notifier.h> #include <linux/smp.h> @@ -182,9 +183,7 @@ EXPORT_SYMBOL_GPL(balance_dirty_pages); */ void balance_dirty_pages_ratelimited(struct address_space *mapping) { - static struct rate_limit_struct { - int count; - } ____cacheline_aligned_in_smp ratelimits[NR_CPUS]; + static DEFINE_PER_CPU(int, ratelimits) = 0; int cpu; long ratelimit; @@ -193,8 +192,8 @@ void balance_dirty_pages_ratelimited(struct address_space *mapping) ratelimit = 8; cpu = get_cpu(); - if (ratelimits[cpu].count++ >= ratelimit) { - ratelimits[cpu].count = 0; + if (per_cpu(ratelimits, cpu)++ >= ratelimit) { + per_cpu(ratelimits, cpu) = 0; put_cpu(); balance_dirty_pages(mapping); return; |
