diff mbox series

block: don't do cgroup accounting for split bio's

Message ID 20180727211407.24318-1-josef@toxicpanda.com (mailing list archive)
State New, archived
Headers show
Series block: don't do cgroup accounting for split bio's | expand

Commit Message

Josef Bacik July 27, 2018, 9:14 p.m. UTC
We need to check in blkcg_bio_issue_check if the bio is flagged as
QUEUE_ENTERED, because if it is then we've already accounted for the IO
in the cgroup stats.

Reported-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
---
 include/linux/blk-cgroup.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Jens Axboe July 27, 2018, 9:17 p.m. UTC | #1
On 7/27/18 3:14 PM, Josef Bacik wrote:
> We need to check in blkcg_bio_issue_check if the bio is flagged as
> QUEUE_ENTERED, because if it is then we've already accounted for the IO
> in the cgroup stats.

That's a bit of a flag overload, I think that at least warrants a
comment.
Josef Bacik July 27, 2018, 9:19 p.m. UTC | #2
On Fri, Jul 27, 2018 at 03:17:11PM -0600, Jens Axboe wrote:
> On 7/27/18 3:14 PM, Josef Bacik wrote:
> > We need to check in blkcg_bio_issue_check if the bio is flagged as
> > QUEUE_ENTERED, because if it is then we've already accounted for the IO
> > in the cgroup stats.
> 
> That's a bit of a flag overload, I think that at least warrants a
> comment.

Yeah I'm not a fan of it, but there's nothing else to indicate that the bio is a
split bio other than checking if it's endio is the chain endio.  I'll respin
with the comment.  Thanks,

Josef
diff mbox series

Patch

diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h
index 3bed5e02a873..a977c31688ae 100644
--- a/include/linux/blk-cgroup.h
+++ b/include/linux/blk-cgroup.h
@@ -767,7 +767,8 @@  static inline bool blkcg_bio_issue_check(struct request_queue *q,
 
 	throtl = blk_throtl_bio(q, blkg, bio);
 
-	if (!throtl) {
+	if (!throtl &&
+	    !bio_flagged(bio, BIO_QUEUE_ENTERED)) {
 		blkg = blkg ?: q->root_blkg;
 		blkg_rwstat_add(&blkg->stat_bytes, bio->bi_opf,
 				bio->bi_iter.bi_size);