public inbox for cgroups@vger.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Toshiaki Makita
	<makita.toshiaki-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
Cc: Jens Axboe <axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>,
	cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] cfq-iosched: Fix wrong children_weight calculation
Date: Tue, 26 Aug 2014 11:46:37 -0400	[thread overview]
Message-ID: <20140826154637.GE29286@htj.dyndns.org> (raw)
In-Reply-To: <1409054196-20945-1-git-send-email-makita.toshiaki-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>

On Tue, Aug 26, 2014 at 08:56:36PM +0900, Toshiaki Makita wrote:
> cfq_group_service_tree_add() is applying new_weight at the beginning of
> the function via cfq_update_group_weight().
> This actually allows weight to change between adding it to and subtracting
> it from children_weight, and triggers WARN_ON_ONCE() in
> cfq_group_service_tree_del(), or even causes oops by divide error during
> vfr calculation in cfq_group_service_tree_add().
> 
> The detailed scenario is as follows:
> 1. Create blkio cgroups X and Y as a child of X.

This is a bit confusing.  Maybe use a different letter for the parent
X?

>    Set X's weight to 500 and perform some I/O to apply new_weight.
>    This X's I/O completes before starting Y's I/O.
> 2. Y starts I/O and cfq_group_service_tree_add() is called with Y.
> 3. cfq_group_service_tree_add() walks up the tree during children_weight
>    calculation and adds parent X's weight (500) to children_weight of root.
>    children_weight becomes 500.
> 4. Set X's weight to 1000.
> 5. X starts I/O and cfq_group_service_tree_add() is called with X.
> 6. cfq_group_service_tree_add() applies its new_weight (1000).
> 7. I/O of Y completes and cfq_group_service_tree_del() is called with Y.
> 8. I/O of X completes and cfq_group_service_tree_del() is called with X.
> 9. cfq_group_service_tree_del() subtracts X's weight (1000) from
>    children_weight of root. children_weight becomes -500.
>    This triggers WARN_ON_ONCE().
> 10. Set X's weight to 500.
> 11. X starts I/O and cfq_group_service_tree_add() is called with X.
> 12. cfq_group_service_tree_add() applies its new_weight (500) and adds it
>     to children_weight of root. children_weight becomes 0. Calcularion of
>     vfr triggers oops by divide error.
> 
> weight should be updated right before adding it to children_weight.
> 
> Reported-by: Ruki Sekiya <sekiya.ruki-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
> Signed-off-by: Toshiaki Makita <makita.toshiaki-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>

Acked-by: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

Comment in the code explaining that new_weight application has to
happen only on activation would be nice tho.

Thanks.

-- 
tejun

  parent reply	other threads:[~2014-08-26 15:46 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-26 11:56 [PATCH] cfq-iosched: Fix wrong children_weight calculation Toshiaki Makita
     [not found] ` <1409054196-20945-1-git-send-email-makita.toshiaki-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-08-26 15:46   ` Tejun Heo [this message]
     [not found]     ` <20140826154637.GE29286-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2014-08-26 15:47       ` Tejun Heo
     [not found]         ` <20140826154711.GF29286-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2014-08-27  7:31           ` Toshiaki Makita

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140826154637.GE29286@htj.dyndns.org \
    --to=tj-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org \
    --cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=makita.toshiaki-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox