]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block/blk-iocost: Inline iocg_lock() and iocg_unlock()
authorBart Van Assche <bvanassche@acm.org>
Fri, 5 Jun 2026 18:01:03 +0000 (11:01 -0700)
committerJens Axboe <axboe@kernel.dk>
Fri, 5 Jun 2026 19:41:11 +0000 (13:41 -0600)
Both iocg_lock() and iocg_unlock() use conditional locking. Fold these
functions into their callers such that unlocking becomes unconditional.

Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Link: https://patch.msgid.link/f8c9867788957d2e40a32e23c6d9b866e480ad9d.1780682325.git.bvanassche@acm.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-iocost.c

index 8f1468444e97dab96df8a648adb0a492dab89608..563cc7dcf348035e777766ebcea63598e1abe827 100644 (file)
@@ -727,26 +727,6 @@ static void iocg_commit_bio(struct ioc_gq *iocg, struct bio *bio,
        put_cpu_ptr(gcs);
 }
 
-static void iocg_lock(struct ioc_gq *iocg, bool lock_ioc, unsigned long *flags)
-{
-       if (lock_ioc) {
-               spin_lock_irqsave(&iocg->ioc->lock, *flags);
-               spin_lock(&iocg->waitq.lock);
-       } else {
-               spin_lock_irqsave(&iocg->waitq.lock, *flags);
-       }
-}
-
-static void iocg_unlock(struct ioc_gq *iocg, bool unlock_ioc, unsigned long *flags)
-{
-       if (unlock_ioc) {
-               spin_unlock(&iocg->waitq.lock);
-               spin_unlock_irqrestore(&iocg->ioc->lock, *flags);
-       } else {
-               spin_unlock_irqrestore(&iocg->waitq.lock, *flags);
-       }
-}
-
 #define CREATE_TRACE_POINTS
 #include <trace/events/iocost.h>
 
@@ -1589,9 +1569,17 @@ static enum hrtimer_restart iocg_waitq_timer_fn(struct hrtimer *timer)
 
        ioc_now(iocg->ioc, &now);
 
-       iocg_lock(iocg, pay_debt, &flags);
-       iocg_kick_waitq(iocg, pay_debt, &now);
-       iocg_unlock(iocg, pay_debt, &flags);
+       if (pay_debt) {
+               spin_lock_irqsave(&iocg->ioc->lock, flags);
+               spin_lock(&iocg->waitq.lock);
+               iocg_kick_waitq(iocg, pay_debt, &now);
+               spin_unlock(&iocg->waitq.lock);
+               spin_unlock_irqrestore(&iocg->ioc->lock, flags);
+       } else {
+               spin_lock_irqsave(&iocg->waitq.lock, flags);
+               iocg_kick_waitq(iocg, pay_debt, &now);
+               spin_unlock_irqrestore(&iocg->waitq.lock, flags);
+       }
 
        return HRTIMER_NORESTART;
 }
@@ -2745,10 +2733,21 @@ static void ioc_rqos_throttle(struct rq_qos *rqos, struct bio *bio)
        use_debt = bio_issue_as_root_blkg(bio) || fatal_signal_pending(current);
        ioc_locked = use_debt || READ_ONCE(iocg->abs_vdebt);
 retry_lock:
-       iocg_lock(iocg, ioc_locked, &flags);
-       action = iocg_handle_over_budget(rqos, iocg, bio, &now, &wait, use_debt,
-                                        ioc_locked, abs_cost, cost);
-       iocg_unlock(iocg, ioc_locked, &flags);
+       if (ioc_locked) {
+               spin_lock_irqsave(&iocg->ioc->lock, flags);
+               spin_lock(&iocg->waitq.lock);
+               action = iocg_handle_over_budget(rqos, iocg, bio, &now, &wait,
+                                                use_debt, ioc_locked, abs_cost,
+                                                cost);
+               spin_unlock(&iocg->waitq.lock);
+               spin_unlock_irqrestore(&iocg->ioc->lock, flags);
+       } else {
+               spin_lock_irqsave(&iocg->waitq.lock, flags);
+               action = iocg_handle_over_budget(rqos, iocg, bio, &now, &wait,
+                                                use_debt, ioc_locked, abs_cost,
+                                                cost);
+               spin_unlock_irqrestore(&iocg->waitq.lock, flags);
+       }
        switch (action) {
        case action_retry:
                ioc_locked = true;