diff options
| author | Dmitry Monakhov <dmonakhov@openvz.org> | 2010-05-26 17:21:58 -0400 |
|---|---|---|
| committer | Jan Kara <jack@suse.cz> | 2010-05-27 12:56:27 -0400 |
| commit | f32764bd2bbb6ea003c158b1d276b4dc9f900348 (patch) | |
| tree | 7fbabde3796a97b8b121349ea76b22b23238230a /include | |
| parent | 1513b02c8b537af275ea74fdfb380c618b9e6778 (diff) | |
quota: Convert quota statistics to generic percpu_counter
Generic per-cpu counter has some memory overhead but it is negligible for
modern systems and embedded systems compile without quota support. And code
reuse is a good thing. This patch should fix complain from preemptive kernels
which was introduced by dde9588853b1bde.
[Jan Kara: Fixed patch to work on 32-bit archs as well]
Reported-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/quota.h | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/include/linux/quota.h b/include/linux/quota.h index 2789d07c37be..94c1f03b50eb 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
| @@ -174,8 +174,7 @@ enum { | |||
| 174 | #include <linux/rwsem.h> | 174 | #include <linux/rwsem.h> |
| 175 | #include <linux/spinlock.h> | 175 | #include <linux/spinlock.h> |
| 176 | #include <linux/wait.h> | 176 | #include <linux/wait.h> |
| 177 | #include <linux/percpu.h> | 177 | #include <linux/percpu_counter.h> |
| 178 | #include <linux/smp.h> | ||
| 179 | 178 | ||
| 180 | #include <linux/dqblk_xfs.h> | 179 | #include <linux/dqblk_xfs.h> |
| 181 | #include <linux/dqblk_v1.h> | 180 | #include <linux/dqblk_v1.h> |
| @@ -254,6 +253,7 @@ enum { | |||
| 254 | 253 | ||
| 255 | struct dqstats { | 254 | struct dqstats { |
| 256 | int stat[_DQST_DQSTAT_LAST]; | 255 | int stat[_DQST_DQSTAT_LAST]; |
| 256 | struct percpu_counter counter[_DQST_DQSTAT_LAST]; | ||
| 257 | }; | 257 | }; |
| 258 | 258 | ||
| 259 | extern struct dqstats *dqstats_pcpu; | 259 | extern struct dqstats *dqstats_pcpu; |
| @@ -261,20 +261,12 @@ extern struct dqstats dqstats; | |||
| 261 | 261 | ||
| 262 | static inline void dqstats_inc(unsigned int type) | 262 | static inline void dqstats_inc(unsigned int type) |
| 263 | { | 263 | { |
| 264 | #ifdef CONFIG_SMP | 264 | percpu_counter_inc(&dqstats.counter[type]); |
| 265 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]++; | ||
| 266 | #else | ||
| 267 | dqstats.stat[type]++; | ||
| 268 | #endif | ||
| 269 | } | 265 | } |
| 270 | 266 | ||
| 271 | static inline void dqstats_dec(unsigned int type) | 267 | static inline void dqstats_dec(unsigned int type) |
| 272 | { | 268 | { |
| 273 | #ifdef CONFIG_SMP | 269 | percpu_counter_dec(&dqstats.counter[type]); |
| 274 | per_cpu_ptr(dqstats_pcpu, smp_processor_id())->stat[type]--; | ||
| 275 | #else | ||
| 276 | dqstats.stat[type]--; | ||
| 277 | #endif | ||
| 278 | } | 270 | } |
| 279 | 271 | ||
| 280 | #define DQ_MOD_B 0 /* dquot modified since read */ | 272 | #define DQ_MOD_B 0 /* dquot modified since read */ |
