blk-iocost: clamp inuse and skip noops in __propagate_weights()
authorTejun Heo <tj@kernel.org>
Tue, 1 Sep 2020 18:52:35 +0000 (14:52 -0400)
committerJens Axboe <axboe@kernel.dk>
Wed, 2 Sep 2020 01:38:31 +0000 (19:38 -0600)
__propagate_weights() currently expects the callers to clamp inuse within
[1, active], which is needlessly fragile. The inuse adjustment logic is
going to be revamped, in preparation, let's make __propagate_weights() clamp
inuse on entry.

Also, make it avoid weight updates altogether if neither active or inuse is
changed.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-iocost.c

index 78e6919..8dfe73d 100644 (file)
@@ -897,7 +897,10 @@ static void __propagate_weights(struct ioc_gq *iocg, u32 active, u32 inuse)
 
        lockdep_assert_held(&ioc->lock);
 
-       inuse = min(active, inuse);
+       inuse = clamp_t(u32, inuse, 1, active);
+
+       if (active == iocg->active && inuse == iocg->inuse)
+               return;
 
        for (lvl = iocg->level - 1; lvl >= 0; lvl--) {
                struct ioc_gq *parent = iocg->ancestors[lvl];