diff options
| author | Hong Zhiguo <zhiguohong@tencent.com> | 2013-11-20 12:35:05 -0500 |
|---|---|---|
| committer | Jens Axboe <axboe@kernel.dk> | 2013-11-20 17:33:04 -0500 |
| commit | 2c575026fae6e63771bd2a4c1d407214a8096a89 (patch) | |
| tree | 4ab6ccbdf75b96229f176fc54e01580954e7a633 /block | |
| parent | 82023bb7f75b0052f40d3e74169d191c3e4e6286 (diff) | |
Update of blkg_stat and blkg_rwstat may happen in bh context.
While u64_stats_fetch_retry is only preempt_disable on 32bit
UP system. This is not enough to avoid preemption by bh and
may read strange 64 bit value.
Signed-off-by: Hong Zhiguo <zhiguohong@tencent.com>
Acked-by: Tejun Heo <tj@kernel.org>
Cc: stable@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
| -rw-r--r-- | block/blk-cgroup.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/block/blk-cgroup.h b/block/blk-cgroup.h index 1610b22edf09..86154eab9523 100644 --- a/block/blk-cgroup.h +++ b/block/blk-cgroup.h | |||
| @@ -435,9 +435,9 @@ static inline uint64_t blkg_stat_read(struct blkg_stat *stat) | |||
| 435 | uint64_t v; | 435 | uint64_t v; |
| 436 | 436 | ||
| 437 | do { | 437 | do { |
| 438 | start = u64_stats_fetch_begin(&stat->syncp); | 438 | start = u64_stats_fetch_begin_bh(&stat->syncp); |
| 439 | v = stat->cnt; | 439 | v = stat->cnt; |
| 440 | } while (u64_stats_fetch_retry(&stat->syncp, start)); | 440 | } while (u64_stats_fetch_retry_bh(&stat->syncp, start)); |
| 441 | 441 | ||
| 442 | return v; | 442 | return v; |
| 443 | } | 443 | } |
| @@ -508,9 +508,9 @@ static inline struct blkg_rwstat blkg_rwstat_read(struct blkg_rwstat *rwstat) | |||
| 508 | struct blkg_rwstat tmp; | 508 | struct blkg_rwstat tmp; |
| 509 | 509 | ||
| 510 | do { | 510 | do { |
| 511 | start = u64_stats_fetch_begin(&rwstat->syncp); | 511 | start = u64_stats_fetch_begin_bh(&rwstat->syncp); |
| 512 | tmp = *rwstat; | 512 | tmp = *rwstat; |
| 513 | } while (u64_stats_fetch_retry(&rwstat->syncp, start)); | 513 | } while (u64_stats_fetch_retry_bh(&rwstat->syncp, start)); |
| 514 | 514 | ||
| 515 | return tmp; | 515 | return tmp; |
| 516 | } | 516 | } |
