Message ID | 2fefc7364715a5c7d928fd02e4edeb7f80633c7f.1510682654.git.shli@fb.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Nov 14, 2017 at 10:05:07AM -0800, Shaohua Li wrote: > blkcg_bio_issue_check() checks throtl for stat update, which isn't good > because the bio could be splitted into small bios, the samll bios go > into blkcg_bio_issue_check again and we update stat for the small bios, > so we the stat is double charged. To fix this, we only update stat if > the bio doesn't have BIO_THROTTLED flag. The fix will update stat ahead > of bio skips from blk-throttle, but eventually the stat is correct. > > This patch is on top of patch: > https://marc.info/?l=linux-block&m=151060860608914&w=2 > > Cc: Tejun Heo <tj@kernel.org> > Signed-off-by: Shaohua Li <shli@fb.com> Acked-by: Tejun Heo <tj@kernel.org> Thanks.
diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h index 58f3d25..6fbd9ea 100644 --- a/include/linux/blk-cgroup.h +++ b/include/linux/blk-cgroup.h @@ -690,7 +690,8 @@ static inline bool blkcg_bio_issue_check(struct request_queue *q, { struct blkcg *blkcg; struct blkcg_gq *blkg; - bool throtl = false; + bool throtl; + bool charged; rcu_read_lock(); blkcg = bio_blkcg(bio); @@ -707,9 +708,10 @@ static inline bool blkcg_bio_issue_check(struct request_queue *q, spin_unlock_irq(q->queue_lock); } + charged = bio_flagged(bio, BIO_THROTTLED); throtl = blk_throtl_bio(q, blkg, bio); - if (!throtl) { + if (!charged) { blkg = blkg ?: q->root_blkg; blkg_rwstat_add(&blkg->stat_bytes, bio->bi_opf, bio->bi_iter.bi_size);
blkcg_bio_issue_check() checks throtl for stat update, which isn't good because the bio could be splitted into small bios, the samll bios go into blkcg_bio_issue_check again and we update stat for the small bios, so we the stat is double charged. To fix this, we only update stat if the bio doesn't have BIO_THROTTLED flag. The fix will update stat ahead of bio skips from blk-throttle, but eventually the stat is correct. This patch is on top of patch: https://marc.info/?l=linux-block&m=151060860608914&w=2 Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Shaohua Li <shli@fb.com> --- include/linux/blk-cgroup.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)