Message ID | 1573629691-6619-1-git-send-email-jiufei.xue@linux.alibaba.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | iocost: check active_list of all the ancestors in iocg_activate() | expand |
On Wed, Nov 13, 2019 at 03:21:31PM +0800, Jiufei Xue wrote: > There is a bug that checking the same active_list over and over again > in iocg_activate(). The intention of the code was checking whether all > the ancestors and self have already been activated. So fix it. > > Signed-off-by: Jiufei Xue <jiufei.xue@linux.alibaba.com> Fixes: 7caa47151ab2 ("blkcg: implement blk-iocost") Acked-by: Tejun Heo <tj@kernel.org> Jens, can you please apply this patch? Thans.
On 11/13/19 9:20 AM, Tejun Heo wrote: > On Wed, Nov 13, 2019 at 03:21:31PM +0800, Jiufei Xue wrote: >> There is a bug that checking the same active_list over and over again >> in iocg_activate(). The intention of the code was checking whether all >> the ancestors and self have already been activated. So fix it. >> >> Signed-off-by: Jiufei Xue <jiufei.xue@linux.alibaba.com> > > Fixes: 7caa47151ab2 ("blkcg: implement blk-iocost") > Acked-by: Tejun Heo <tj@kernel.org> > > Jens, can you please apply this patch? Applied for 5.4, thanks.
diff --git a/block/blk-iocost.c b/block/blk-iocost.c index a7ed434..e01267f 100644 --- a/block/blk-iocost.c +++ b/block/blk-iocost.c @@ -1057,9 +1057,12 @@ static bool iocg_activate(struct ioc_gq *iocg, struct ioc_now *now) atomic64_set(&iocg->active_period, cur_period); /* already activated or breaking leaf-only constraint? */ - for (i = iocg->level; i > 0; i--) - if (!list_empty(&iocg->active_list)) + if (!list_empty(&iocg->active_list)) + goto succeed_unlock; + for (i = iocg->level - 1; i > 0; i--) + if (!list_empty(&iocg->ancestors[i]->active_list)) goto fail_unlock; + if (iocg->child_active_sum) goto fail_unlock; @@ -1101,6 +1104,7 @@ static bool iocg_activate(struct ioc_gq *iocg, struct ioc_now *now) ioc_start_period(ioc, now); } +succeed_unlock: spin_unlock_irq(&ioc->lock); return true;
There is a bug that checking the same active_list over and over again in iocg_activate(). The intention of the code was checking whether all the ancestors and self have already been activated. So fix it. Signed-off-by: Jiufei Xue <jiufei.xue@linux.alibaba.com> --- block/blk-iocost.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)