aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
authorBart Van Assche <bvanassche@acm.org>2026-06-05 11:01:03 -0700
committerJens Axboe <axboe@kernel.dk>2026-06-05 13:41:11 -0600
commita255026594e9b7eea24c12d2bd4acae0c11eea94 (patch)
tree2e5fd1cbbc2995a2a8c63e311c6d7aca328992d9 /block
parent1ff85a387947890938c05cfe22041dfeef3098dd (diff)
downloadath-a255026594e9b7eea24c12d2bd4acae0c11eea94.tar.gz
block/blk-iocost: Inline iocg_lock() and iocg_unlock()
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>
Diffstat (limited to 'block')
-rw-r--r--block/blk-iocost.c53
1 files changed, 26 insertions, 27 deletions
diff --git a/block/blk-iocost.c b/block/blk-iocost.c
index 8f1468444e97d..563cc7dcf3480 100644
--- a/block/blk-iocost.c
+++ b/block/blk-iocost.c
@@ -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;