]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Mingming Cao <cmm@us.ibm.com> |
2 | Subject: percpu counter: clean up percpu_counter_sum_and_set() | |
3 | References: fate#303783 | |
4 | ||
5 | percpu_counter_sum_and_set() and percpu_counter_sum() is the same except | |
6 | the former update the global counter after accounting. Since we are | |
7 | taking the fbc->lock to calculate the precise value of the | |
8 | counter in percpu_counter_sum() anyway, it should simply set fbc->count | |
9 | too, as the percpu_counter_sum_and_set() dose. | |
10 | ||
11 | This patch merge these two interfaces into one. | |
12 | ||
13 | Signed-off-by: Mingming Cao <cmm@us.ibm.com> | |
14 | Acked-by: Jan Kara <jack@suse.cz> | |
15 | --- | |
16 | fs/ext4/balloc.c | 2 +- | |
17 | include/linux/percpu_counter.h | 12 +++--------- | |
18 | lib/percpu_counter.c | 8 +++----- | |
19 | 3 files changed, 7 insertions(+), 15 deletions(-) | |
20 | ||
21 | Index: linux-2.6.27-rc3/fs/ext4/balloc.c | |
22 | =================================================================== | |
23 | --- linux-2.6.27-rc3.orig/fs/ext4/balloc.c 2008-08-20 17:25:35.000000000 -0700 | |
24 | +++ linux-2.6.27-rc3/fs/ext4/balloc.c 2008-08-21 14:34:32.000000000 -0700 | |
25 | @@ -1624,7 +1624,7 @@ | |
26 | #ifdef CONFIG_SMP | |
27 | if (free_blocks - root_blocks < FBC_BATCH) | |
28 | free_blocks = | |
29 | - percpu_counter_sum_and_set(&sbi->s_freeblocks_counter); | |
30 | + percpu_counter_sum(&sbi->s_freeblocks_counter); | |
31 | #endif | |
32 | if (free_blocks <= root_blocks) | |
33 | /* we don't have free space */ | |
34 | Index: linux-2.6.27-rc3/include/linux/percpu_counter.h | |
35 | =================================================================== | |
36 | --- linux-2.6.27-rc3.orig/include/linux/percpu_counter.h 2008-08-20 17:25:35.000000000 -0700 | |
37 | +++ linux-2.6.27-rc3/include/linux/percpu_counter.h 2008-08-21 14:34:32.000000000 -0700 | |
38 | @@ -35,7 +35,7 @@ | |
39 | void percpu_counter_destroy(struct percpu_counter *fbc); | |
40 | void percpu_counter_set(struct percpu_counter *fbc, s64 amount); | |
41 | void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch); | |
42 | -s64 __percpu_counter_sum(struct percpu_counter *fbc, int set); | |
43 | +s64 __percpu_counter_sum(struct percpu_counter *fbc); | |
44 | ||
45 | static inline void percpu_counter_add(struct percpu_counter *fbc, s64 amount) | |
46 | { | |
47 | @@ -44,19 +44,13 @@ | |
48 | ||
49 | static inline s64 percpu_counter_sum_positive(struct percpu_counter *fbc) | |
50 | { | |
51 | - s64 ret = __percpu_counter_sum(fbc, 0); | |
52 | + s64 ret = __percpu_counter_sum(fbc); | |
53 | return ret < 0 ? 0 : ret; | |
54 | } | |
55 | ||
56 | -static inline s64 percpu_counter_sum_and_set(struct percpu_counter *fbc) | |
57 | -{ | |
58 | - return __percpu_counter_sum(fbc, 1); | |
59 | -} | |
60 | - | |
61 | - | |
62 | static inline s64 percpu_counter_sum(struct percpu_counter *fbc) | |
63 | { | |
64 | - return __percpu_counter_sum(fbc, 0); | |
65 | + return __percpu_counter_sum(fbc); | |
66 | } | |
67 | ||
68 | static inline s64 percpu_counter_read(struct percpu_counter *fbc) | |
69 | Index: linux-2.6.27-rc3/lib/percpu_counter.c | |
70 | =================================================================== | |
71 | --- linux-2.6.27-rc3.orig/lib/percpu_counter.c 2008-08-20 17:25:35.000000000 -0700 | |
72 | +++ linux-2.6.27-rc3/lib/percpu_counter.c 2008-08-21 14:34:32.000000000 -0700 | |
73 | @@ -52,7 +52,7 @@ | |
74 | * Add up all the per-cpu counts, return the result. This is a more accurate | |
75 | * but much slower version of percpu_counter_read_positive() | |
76 | */ | |
77 | -s64 __percpu_counter_sum(struct percpu_counter *fbc, int set) | |
78 | +s64 __percpu_counter_sum(struct percpu_counter *fbc) | |
79 | { | |
80 | s64 ret; | |
81 | int cpu; | |
82 | @@ -62,11 +62,9 @@ | |
83 | for_each_online_cpu(cpu) { | |
84 | s32 *pcount = per_cpu_ptr(fbc->counters, cpu); | |
85 | ret += *pcount; | |
86 | - if (set) | |
87 | - *pcount = 0; | |
88 | + *pcount = 0; | |
89 | } | |
90 | - if (set) | |
91 | - fbc->count = ret; | |
92 | + fbc->count = ret; | |
93 | ||
94 | spin_unlock(&fbc->lock); | |
95 | return ret; |