[PATCH 2/2] blk-iocost: only flush wait and indebt stat deltas when needed

From: Chengming Zhou
Date: Wed Jun 01 2022 - 08:22:57 EST


We only need to flush wait and indebt stat deltas when the iocg
is in these status.

Signed-off-by: Chengming Zhou <zhouchengming@xxxxxxxxxxxxx>
---
block/blk-iocost.c | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/block/blk-iocost.c b/block/blk-iocost.c
index b1f2305e8032..502425b44475 100644
--- a/block/blk-iocost.c
+++ b/block/blk-iocost.c
@@ -2174,28 +2174,28 @@ static int ioc_check_iocgs(struct ioc *ioc, struct ioc_now *now)

spin_lock(&iocg->waitq.lock);

- /* flush wait and indebt stat deltas */
- if (iocg->wait_since) {
- iocg->stat.wait_us += now->now - iocg->wait_since;
- iocg->wait_since = now->now;
- }
- if (iocg->indebt_since) {
- iocg->stat.indebt_us +=
- now->now - iocg->indebt_since;
- iocg->indebt_since = now->now;
- }
- if (iocg->indelay_since) {
- iocg->stat.indelay_us +=
- now->now - iocg->indelay_since;
- iocg->indelay_since = now->now;
- }
-
if (waitqueue_active(&iocg->waitq) || iocg->abs_vdebt ||
iocg->delay) {
/* might be oversleeping vtime / hweight changes, kick */
iocg_kick_waitq(iocg, true, now);
if (iocg->abs_vdebt || iocg->delay)
nr_debtors++;
+
+ /* flush wait and indebt stat deltas */
+ if (iocg->wait_since) {
+ iocg->stat.wait_us += now->now - iocg->wait_since;
+ iocg->wait_since = now->now;
+ }
+ if (iocg->indebt_since) {
+ iocg->stat.indebt_us +=
+ now->now - iocg->indebt_since;
+ iocg->indebt_since = now->now;
+ }
+ if (iocg->indelay_since) {
+ iocg->stat.indelay_us +=
+ now->now - iocg->indelay_since;
+ iocg->indelay_since = now->now;
+ }
} else if (iocg_is_idle(iocg))
iocg_deactivate(iocg, now);

--
2.36.1