blk-rq-qos: move rq_qos_add and rq_qos_del out of line
authorChristoph Hellwig <hch@lst.de>
Fri, 3 Feb 2023 15:03:53 +0000 (16:03 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 3 Feb 2023 15:20:05 +0000 (08:20 -0700)
These two functions are rather larger and not in a fast path, so move
them out of line.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: Tejun Heo <tj@kernel.org>
Link: https://lore.kernel.org/r/20230203150400.3199230-13-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-rq-qos.c
block/blk-rq-qos.h

index 88f0fe7..aae98dc 100644 (file)
@@ -294,3 +294,63 @@ void rq_qos_exit(struct request_queue *q)
                rqos->ops->exit(rqos);
        }
 }
+
+int rq_qos_add(struct request_queue *q, struct rq_qos *rqos)
+{
+       /*
+        * No IO can be in-flight when adding rqos, so freeze queue, which
+        * is fine since we only support rq_qos for blk-mq queue.
+        *
+        * Reuse ->queue_lock for protecting against other concurrent
+        * rq_qos adding/deleting
+        */
+       blk_mq_freeze_queue(q);
+
+       spin_lock_irq(&q->queue_lock);
+       if (rq_qos_id(q, rqos->id))
+               goto ebusy;
+       rqos->next = q->rq_qos;
+       q->rq_qos = rqos;
+       spin_unlock_irq(&q->queue_lock);
+
+       blk_mq_unfreeze_queue(q);
+
+       if (rqos->ops->debugfs_attrs) {
+               mutex_lock(&q->debugfs_mutex);
+               blk_mq_debugfs_register_rqos(rqos);
+               mutex_unlock(&q->debugfs_mutex);
+       }
+
+       return 0;
+ebusy:
+       spin_unlock_irq(&q->queue_lock);
+       blk_mq_unfreeze_queue(q);
+       return -EBUSY;
+
+}
+
+void rq_qos_del(struct request_queue *q, struct rq_qos *rqos)
+{
+       struct rq_qos **cur;
+
+       /*
+        * See comment in rq_qos_add() about freezing queue & using
+        * ->queue_lock.
+        */
+       blk_mq_freeze_queue(q);
+
+       spin_lock_irq(&q->queue_lock);
+       for (cur = &q->rq_qos; *cur; cur = &(*cur)->next) {
+               if (*cur == rqos) {
+                       *cur = rqos->next;
+                       break;
+               }
+       }
+       spin_unlock_irq(&q->queue_lock);
+
+       blk_mq_unfreeze_queue(q);
+
+       mutex_lock(&q->debugfs_mutex);
+       blk_mq_debugfs_unregister_rqos(rqos);
+       mutex_unlock(&q->debugfs_mutex);
+}
index 1ef1f7d..805eee8 100644 (file)
@@ -85,65 +85,8 @@ static inline void rq_wait_init(struct rq_wait *rq_wait)
        init_waitqueue_head(&rq_wait->wait);
 }
 
-static inline int rq_qos_add(struct request_queue *q, struct rq_qos *rqos)
-{
-       /*
-        * No IO can be in-flight when adding rqos, so freeze queue, which
-        * is fine since we only support rq_qos for blk-mq queue.
-        *
-        * Reuse ->queue_lock for protecting against other concurrent
-        * rq_qos adding/deleting
-        */
-       blk_mq_freeze_queue(q);
-
-       spin_lock_irq(&q->queue_lock);
-       if (rq_qos_id(q, rqos->id))
-               goto ebusy;
-       rqos->next = q->rq_qos;
-       q->rq_qos = rqos;
-       spin_unlock_irq(&q->queue_lock);
-
-       blk_mq_unfreeze_queue(q);
-
-       if (rqos->ops->debugfs_attrs) {
-               mutex_lock(&q->debugfs_mutex);
-               blk_mq_debugfs_register_rqos(rqos);
-               mutex_unlock(&q->debugfs_mutex);
-       }
-
-       return 0;
-ebusy:
-       spin_unlock_irq(&q->queue_lock);
-       blk_mq_unfreeze_queue(q);
-       return -EBUSY;
-
-}
-
-static inline void rq_qos_del(struct request_queue *q, struct rq_qos *rqos)
-{
-       struct rq_qos **cur;
-
-       /*
-        * See comment in rq_qos_add() about freezing queue & using
-        * ->queue_lock.
-        */
-       blk_mq_freeze_queue(q);
-
-       spin_lock_irq(&q->queue_lock);
-       for (cur = &q->rq_qos; *cur; cur = &(*cur)->next) {
-               if (*cur == rqos) {
-                       *cur = rqos->next;
-                       break;
-               }
-       }
-       spin_unlock_irq(&q->queue_lock);
-
-       blk_mq_unfreeze_queue(q);
-
-       mutex_lock(&q->debugfs_mutex);
-       blk_mq_debugfs_unregister_rqos(rqos);
-       mutex_unlock(&q->debugfs_mutex);
-}
+int rq_qos_add(struct request_queue *q, struct rq_qos *rqos);
+void rq_qos_del(struct request_queue *q, struct rq_qos *rqos);
 
 typedef bool (acquire_inflight_cb_t)(struct rq_wait *rqw, void *private_data);
 typedef void (cleanup_cb_t)(struct rq_wait *rqw, void *private_data);