]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
block/blk-mq-debugfs: Improve lock context annotations
authorBart Van Assche <bvanassche@acm.org>
Fri, 5 Jun 2026 18:01:04 +0000 (11:01 -0700)
committerJens Axboe <axboe@kernel.dk>
Fri, 5 Jun 2026 19:41:11 +0000 (13:41 -0600)
Make the existing lock context annotations compatible with Clang. Add
the lock context annotations that are missing.

Reviewed-by: Hannes Reinecke <hare@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Link: https://patch.msgid.link/f58fe220ff98f9dfddfed4573f40005c773b7fb7.1780682325.git.bvanassche@acm.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq-debugfs.c
block/blk.h

index 047ec887456b6da5388293d3abc3cac89fba47d6..6754d8f9449c1078a0328aaed57397557d777006 100644 (file)
@@ -19,8 +19,10 @@ static int queue_poll_stat_show(void *data, struct seq_file *m)
        return 0;
 }
 
+#define TO_REQUEST_QUEUE(m) ((struct request_queue *)m->private)
+
 static void *queue_requeue_list_start(struct seq_file *m, loff_t *pos)
-       __acquires(&q->requeue_lock)
+       __acquires(&TO_REQUEST_QUEUE(m)->requeue_lock)
 {
        struct request_queue *q = m->private;
 
@@ -36,13 +38,15 @@ static void *queue_requeue_list_next(struct seq_file *m, void *v, loff_t *pos)
 }
 
 static void queue_requeue_list_stop(struct seq_file *m, void *v)
-       __releases(&q->requeue_lock)
+       __releases(&TO_REQUEST_QUEUE(m)->requeue_lock)
 {
        struct request_queue *q = m->private;
 
        spin_unlock_irq(&q->requeue_lock);
 }
 
+#undef TO_REQUEST_QUEUE
+
 static const struct seq_operations queue_requeue_list_seq_ops = {
        .start  = queue_requeue_list_start,
        .next   = queue_requeue_list_next,
@@ -297,8 +301,10 @@ int blk_mq_debugfs_rq_show(struct seq_file *m, void *v)
 }
 EXPORT_SYMBOL_GPL(blk_mq_debugfs_rq_show);
 
+#define TO_HCTX(m) ((struct blk_mq_hw_ctx *)m->private)
+
 static void *hctx_dispatch_start(struct seq_file *m, loff_t *pos)
-       __acquires(&hctx->lock)
+       __acquires(&TO_HCTX(m)->lock)
 {
        struct blk_mq_hw_ctx *hctx = m->private;
 
@@ -314,13 +320,15 @@ static void *hctx_dispatch_next(struct seq_file *m, void *v, loff_t *pos)
 }
 
 static void hctx_dispatch_stop(struct seq_file *m, void *v)
-       __releases(&hctx->lock)
+       __releases(&TO_HCTX(m)->lock)
 {
        struct blk_mq_hw_ctx *hctx = m->private;
 
        spin_unlock(&hctx->lock);
 }
 
+#undef TO_HCTX
+
 static const struct seq_operations hctx_dispatch_seq_ops = {
        .start  = hctx_dispatch_start,
        .next   = hctx_dispatch_next,
@@ -484,9 +492,11 @@ static int hctx_dispatch_busy_show(void *data, struct seq_file *m)
        return 0;
 }
 
+#define TO_CTX(m) ((struct blk_mq_ctx *)m->private)
+
 #define CTX_RQ_SEQ_OPS(name, type)                                     \
 static void *ctx_##name##_rq_list_start(struct seq_file *m, loff_t *pos) \
-       __acquires(&ctx->lock)                                          \
+       __acquires(&TO_CTX(m)->lock)                                    \
 {                                                                      \
        struct blk_mq_ctx *ctx = m->private;                            \
                                                                        \
@@ -503,7 +513,7 @@ static void *ctx_##name##_rq_list_next(struct seq_file *m, void *v, \
 }                                                                      \
                                                                        \
 static void ctx_##name##_rq_list_stop(struct seq_file *m, void *v)     \
-       __releases(&ctx->lock)                                          \
+       __releases(&TO_CTX(m)->lock)                                    \
 {                                                                      \
        struct blk_mq_ctx *ctx = m->private;                            \
                                                                        \
@@ -521,6 +531,8 @@ CTX_RQ_SEQ_OPS(default, HCTX_TYPE_DEFAULT);
 CTX_RQ_SEQ_OPS(read, HCTX_TYPE_READ);
 CTX_RQ_SEQ_OPS(poll, HCTX_TYPE_POLL);
 
+#undef TO_CTX
+
 static int blk_mq_debugfs_show(struct seq_file *m, void *v)
 {
        const struct blk_mq_debugfs_attr *attr = m->private;
index bf1a80493ff1c383900fee188fb129e734d90ddd..1a2d9101bba046a1c0da7baaea534b201cec3082 100644 (file)
@@ -756,16 +756,19 @@ static inline void blk_unfreeze_release_lock(struct request_queue *q)
  * reclaim from triggering block I/O.
  */
 static inline void blk_debugfs_lock_nomemsave(struct request_queue *q)
+       __acquires(&q->debugfs_mutex)
 {
        mutex_lock(&q->debugfs_mutex);
 }
 
 static inline void blk_debugfs_unlock_nomemrestore(struct request_queue *q)
+       __releases(&q->debugfs_mutex)
 {
        mutex_unlock(&q->debugfs_mutex);
 }
 
 static inline unsigned int __must_check blk_debugfs_lock(struct request_queue *q)
+       __acquires(&q->debugfs_mutex)
 {
        unsigned int memflags = memalloc_noio_save();
 
@@ -775,6 +778,7 @@ static inline unsigned int __must_check blk_debugfs_lock(struct request_queue *q
 
 static inline void blk_debugfs_unlock(struct request_queue *q,
                                      unsigned int memflags)
+       __releases(&q->debugfs_mutex)
 {
        blk_debugfs_unlock_nomemrestore(q);
        memalloc_noio_restore(memflags);