All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH RFC 00/11] block debugfs: Catch missing flag array members
@ 2024-07-09 11:05 John Garry
  2024-07-09 11:05 ` [PATCH 01/11] block: remove QUEUE_FLAG_STOPPED John Garry
                   ` (10 more replies)
  0 siblings, 11 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Currently we rely on the developer to add the appropriate entry to the
debugfs flag array when we add a new member.

This has shown to be error prone.

As an attempt to solve this problem, add compile-time assertions that we
are not missing flag array entries.

This should solve the problem that we don't miss entries, but we still
rely on the developer to add in the proper order.

Marking as an RFC as I am not sure if this is the best approach. And the
enum-related changes will require further work, I think.

Christoph Hellwig (1):
  block: remove QUEUE_FLAG_STOPPED

John Garry (10):
  block: Make QUEUE_FLAG_x as an enum
  block: Add build-time assert for size of blk_queue_flag_name[]
  block: Catch possible entries missing from hctx_state_name[]
  block: Catch possible entries missing from hctx_flag_name[]
  block: Catch possible entries missing from alloc_policy_name[]
  block: Add missing entries from cmd_flag_name[]
  block: Catch possible entries missing from cmd_flag_name[]
  block: Make RQF_x as an enum
  block: Add zone write plugging entry to rqf_name[]
  block: Catch possible entries missing from rqf_name[]

 block/blk-mq-debugfs.c    | 20 +++++++--
 include/linux/blk-mq.h    | 88 +++++++++++++++++++++++----------------
 include/linux/blk_types.h |  1 +
 include/linux/blkdev.h    | 31 +++++++-------
 4 files changed, 86 insertions(+), 54 deletions(-)

-- 
2.31.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 01/11] block: remove QUEUE_FLAG_STOPPED
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:05 ` [PATCH 02/11] block: Make QUEUE_FLAG_x as an enum John Garry
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch
  Cc: linux-block, Chaitanya Kulkarni, Bart Van Assche,
	Johannes Thumshirn, John Garry

From: Christoph Hellwig <hch@lst.de>

QUEUE_FLAG_STOPPED is entirely unused.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: John Garry <john.g.garry@oracke.com>
---
 block/blk-mq-debugfs.c | 1 -
 include/linux/blkdev.h | 2 --
 2 files changed, 3 deletions(-)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index 344f9e503bdb..03d0409e5018 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -79,7 +79,6 @@ static int queue_pm_only_show(void *data, struct seq_file *m)
 
 #define QUEUE_FLAG_NAME(name) [QUEUE_FLAG_##name] = #name
 static const char *const blk_queue_flag_name[] = {
-	QUEUE_FLAG_NAME(STOPPED),
 	QUEUE_FLAG_NAME(DYING),
 	QUEUE_FLAG_NAME(NOMERGES),
 	QUEUE_FLAG_NAME(SAME_COMP),
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index dce4a6bf7307..942ad4e0f231 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -588,7 +588,6 @@ struct request_queue {
 };
 
 /* Keep blk_queue_flag_name[] in sync with the definitions below */
-#define QUEUE_FLAG_STOPPED	0	/* queue is stopped */
 #define QUEUE_FLAG_DYING	1	/* queue being torn down */
 #define QUEUE_FLAG_NOMERGES     3	/* disable merge attempts */
 #define QUEUE_FLAG_SAME_COMP	4	/* complete on same CPU-group */
@@ -608,7 +607,6 @@ struct request_queue {
 void blk_queue_flag_set(unsigned int flag, struct request_queue *q);
 void blk_queue_flag_clear(unsigned int flag, struct request_queue *q);
 
-#define blk_queue_stopped(q)	test_bit(QUEUE_FLAG_STOPPED, &(q)->queue_flags)
 #define blk_queue_dying(q)	test_bit(QUEUE_FLAG_DYING, &(q)->queue_flags)
 #define blk_queue_init_done(q)	test_bit(QUEUE_FLAG_INIT_DONE, &(q)->queue_flags)
 #define blk_queue_nomerges(q)	test_bit(QUEUE_FLAG_NOMERGES, &(q)->queue_flags)
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 02/11] block: Make QUEUE_FLAG_x as an enum
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
  2024-07-09 11:05 ` [PATCH 01/11] block: remove QUEUE_FLAG_STOPPED John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:05 ` [PATCH 03/11] block: Add build-time assert for size of blk_queue_flag_name[] John Garry
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

This will allow us better keep in sync with blk_queue_flag_name[].

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
 include/linux/blkdev.h | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 942ad4e0f231..bb521745c702 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -588,19 +588,22 @@ struct request_queue {
 };
 
 /* Keep blk_queue_flag_name[] in sync with the definitions below */
-#define QUEUE_FLAG_DYING	1	/* queue being torn down */
-#define QUEUE_FLAG_NOMERGES     3	/* disable merge attempts */
-#define QUEUE_FLAG_SAME_COMP	4	/* complete on same CPU-group */
-#define QUEUE_FLAG_FAIL_IO	5	/* fake timeout */
-#define QUEUE_FLAG_NOXMERGES	9	/* No extended merges */
-#define QUEUE_FLAG_SAME_FORCE	12	/* force complete on same CPU */
-#define QUEUE_FLAG_INIT_DONE	14	/* queue is initialized */
-#define QUEUE_FLAG_STATS	20	/* track IO start and completion times */
-#define QUEUE_FLAG_REGISTERED	22	/* queue has been registered to a disk */
-#define QUEUE_FLAG_QUIESCED	24	/* queue has been quiesced */
-#define QUEUE_FLAG_RQ_ALLOC_TIME 27	/* record rq->alloc_time_ns */
-#define QUEUE_FLAG_HCTX_ACTIVE	28	/* at least one blk-mq hctx is active */
-#define QUEUE_FLAG_SQ_SCHED     30	/* single queue style io dispatch */
+enum {
+	QUEUE_FLAG_DYING		= 0,	/* queue being torn down */
+	QUEUE_FLAG_NOMERGES,			/* disable merge attempts */
+	QUEUE_FLAG_SAME_COMP,			/* complete on same CPU-group */
+	QUEUE_FLAG_FAIL_IO,			/* fake timeout */
+	QUEUE_FLAG_NOXMERGES,			/* No extended merges */
+	QUEUE_FLAG_SAME_FORCE,			/* force complete on same CPU */
+	QUEUE_FLAG_INIT_DONE,			/* queue is initialized */
+	QUEUE_FLAG_STATS,			/* track IO start and completion times */
+	QUEUE_FLAG_REGISTERED,			/* queue has been registered to a disk */
+	QUEUE_FLAG_QUIESCED,			/* queue has been quiesced */
+	QUEUE_FLAG_RQ_ALLOC_TIME,		/* record rq->alloc_time_ns */
+	QUEUE_FLAG_HCTX_ACTIVE,			/* at least one blk-mq hctx is active */
+	QUEUE_FLAG_SQ_SCHED,			/* single queue style io dispatch */
+	QUEUE_FLAG_MAX
+};
 
 #define QUEUE_FLAG_MQ_DEFAULT	(1UL << QUEUE_FLAG_SAME_COMP)
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 03/11] block: Add build-time assert for size of blk_queue_flag_name[]
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
  2024-07-09 11:05 ` [PATCH 01/11] block: remove QUEUE_FLAG_STOPPED John Garry
  2024-07-09 11:05 ` [PATCH 02/11] block: Make QUEUE_FLAG_x as an enum John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:05 ` [PATCH 04/11] block: Catch possible entries missing from hctx_state_name[] John Garry
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Assert that we are not missing flag entries in blk_queue_flag_name[].

However, we are not catching mis-ordered flags. This should not be
necessary.

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
 block/blk-mq-debugfs.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index 03d0409e5018..9e18ba6b1c4d 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -5,6 +5,7 @@
 
 #include <linux/kernel.h>
 #include <linux/blkdev.h>
+#include <linux/build_bug.h>
 #include <linux/debugfs.h>
 
 #include "blk.h"
@@ -99,6 +100,7 @@ static int queue_state_show(void *data, struct seq_file *m)
 {
 	struct request_queue *q = data;
 
+	BUILD_BUG_ON(ARRAY_SIZE(blk_queue_flag_name) != QUEUE_FLAG_MAX);
 	blk_flags_show(m, q->queue_flags, blk_queue_flag_name,
 		       ARRAY_SIZE(blk_queue_flag_name));
 	seq_puts(m, "\n");
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 04/11] block: Catch possible entries missing from hctx_state_name[]
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
                   ` (2 preceding siblings ...)
  2024-07-09 11:05 ` [PATCH 03/11] block: Add build-time assert for size of blk_queue_flag_name[] John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:05 ` [PATCH 05/11] block: Catch possible entries missing from hctx_flag_name[] John Garry
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Add a build-time assert that we are not missing entries from
hctx_state_name[]. For this, add a "max" entry for BLK_MQ_S_x flags.

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
 block/blk-mq-debugfs.c | 1 +
 include/linux/blk-mq.h | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index 9e18ba6b1c4d..fca8b82464b4 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -165,6 +165,7 @@ static int hctx_state_show(void *data, struct seq_file *m)
 {
 	struct blk_mq_hw_ctx *hctx = data;
 
+	BUILD_BUG_ON(ARRAY_SIZE(hctx_state_name) != BLK_MQ_S_MAX);
 	blk_flags_show(m, hctx->state, hctx_state_name,
 		       ARRAY_SIZE(hctx_state_name));
 	seq_puts(m, "\n");
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 89ba6b16fe8b..225e51698470 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -664,12 +664,14 @@ enum {
 	BLK_MQ_F_ALLOC_POLICY_START_BIT = 8,
 	BLK_MQ_F_ALLOC_POLICY_BITS = 1,
 
+	/* Keep hctx_state_name[] in sync with the definitions below */
 	BLK_MQ_S_STOPPED	= 0,
 	BLK_MQ_S_TAG_ACTIVE	= 1,
 	BLK_MQ_S_SCHED_RESTART	= 2,
 
 	/* hw queue is inactive after all its CPUs become offline */
 	BLK_MQ_S_INACTIVE	= 3,
+	BLK_MQ_S_MAX,
 
 	BLK_MQ_MAX_DEPTH	= 10240,
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 05/11] block: Catch possible entries missing from hctx_flag_name[]
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
                   ` (3 preceding siblings ...)
  2024-07-09 11:05 ` [PATCH 04/11] block: Catch possible entries missing from hctx_state_name[] John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:05 ` [PATCH 06/11] block: Catch possible entries missing from alloc_policy_name[] John Garry
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Re-arrange members in hctx_flag_name[] to match the enum in which the flags
are declared.

Also add a BUILD_BUG_ON() call to ensure that we are not missing entries
in hctx_flag_name[].

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
BLK_MQ_F_MAX is a bit odd, as it is a bit index and not a flag.
 block/blk-mq-debugfs.c | 6 ++++--
 include/linux/blk-mq.h | 8 ++++++--
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index fca8b82464b4..74f470d0e1ea 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -183,10 +183,10 @@ static const char *const alloc_policy_name[] = {
 static const char *const hctx_flag_name[] = {
 	HCTX_FLAG_NAME(SHOULD_MERGE),
 	HCTX_FLAG_NAME(TAG_QUEUE_SHARED),
-	HCTX_FLAG_NAME(BLOCKING),
-	HCTX_FLAG_NAME(NO_SCHED),
 	HCTX_FLAG_NAME(STACKING),
 	HCTX_FLAG_NAME(TAG_HCTX_SHARED),
+	HCTX_FLAG_NAME(BLOCKING),
+	HCTX_FLAG_NAME(NO_SCHED),
 };
 #undef HCTX_FLAG_NAME
 
@@ -195,6 +195,8 @@ static int hctx_flags_show(void *data, struct seq_file *m)
 	struct blk_mq_hw_ctx *hctx = data;
 	const int alloc_policy = BLK_MQ_FLAG_TO_ALLOC_POLICY(hctx->flags);
 
+	BUILD_BUG_ON(ARRAY_SIZE(hctx_flag_name) != BLK_MQ_F_MAX);
+
 	seq_puts(m, "alloc_policy=");
 	if (alloc_policy < ARRAY_SIZE(alloc_policy_name) &&
 	    alloc_policy_name[alloc_policy])
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 225e51698470..b3905b77f375 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -644,6 +644,7 @@ struct blk_mq_ops {
 #endif
 };
 
+/* Keep hctx_flag_name[] in sync with the definitions below */
 enum {
 	BLK_MQ_F_SHOULD_MERGE	= 1 << 0,
 	BLK_MQ_F_TAG_QUEUE_SHARED = 1 << 1,
@@ -653,9 +654,12 @@ enum {
 	 */
 	BLK_MQ_F_STACKING	= 1 << 2,
 	BLK_MQ_F_TAG_HCTX_SHARED = 1 << 3,
-	BLK_MQ_F_BLOCKING	= 1 << 5,
+	BLK_MQ_F_BLOCKING	= 1 << 4,
 	/* Do not allow an I/O scheduler to be configured. */
-	BLK_MQ_F_NO_SCHED	= 1 << 6,
+	BLK_MQ_F_NO_SCHED	= 1 << 5,
+
+	BLK_MQ_F_MAX		= 6,
+
 	/*
 	 * Select 'none' during queue registration in case of a single hwq
 	 * or shared hwqs instead of 'mq-deadline'.
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 06/11] block: Catch possible entries missing from alloc_policy_name[]
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
                   ` (4 preceding siblings ...)
  2024-07-09 11:05 ` [PATCH 05/11] block: Catch possible entries missing from hctx_flag_name[] John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:05 ` [PATCH 07/11] block: Add missing entries from cmd_flag_name[] John Garry
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Make BLK_TAG_ALLOC_x an enum and add a "max" entry.

Also add a BUILD_BUG_ON() call to ensure that we are not missing entries
in hctx_flag_name[].

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
 block/blk-mq-debugfs.c |  1 +
 include/linux/blk-mq.h | 10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index 74f470d0e1ea..e37d5a2dd942 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -196,6 +196,7 @@ static int hctx_flags_show(void *data, struct seq_file *m)
 	const int alloc_policy = BLK_MQ_FLAG_TO_ALLOC_POLICY(hctx->flags);
 
 	BUILD_BUG_ON(ARRAY_SIZE(hctx_flag_name) != BLK_MQ_F_MAX);
+	BUILD_BUG_ON(ARRAY_SIZE(alloc_policy_name) != BLK_TAG_ALLOC_MAX);
 
 	seq_puts(m, "alloc_policy=");
 	if (alloc_policy < ARRAY_SIZE(alloc_policy_name) &&
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index b3905b77f375..aefbf93d431a 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -278,8 +278,14 @@ enum blk_eh_timer_return {
 	BLK_EH_RESET_TIMER,
 };
 
-#define BLK_TAG_ALLOC_FIFO 0 /* allocate starting from 0 */
-#define BLK_TAG_ALLOC_RR 1 /* allocate starting from last allocated tag */
+/* Keep alloc_policy_name[] in sync with the definitions below */
+enum {
+	/* allocate starting from 0 */
+	BLK_TAG_ALLOC_FIFO	= 0,
+	/* allocate starting from last allocated tag */
+	BLK_TAG_ALLOC_RR,
+	BLK_TAG_ALLOC_MAX
+};
 
 /**
  * struct blk_mq_hw_ctx - State for a hardware queue facing the hardware
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 07/11] block: Add missing entries from cmd_flag_name[]
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
                   ` (5 preceding siblings ...)
  2024-07-09 11:05 ` [PATCH 06/11] block: Catch possible entries missing from alloc_policy_name[] John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 23:08   ` kernel test robot
  2024-07-09 11:05 ` [PATCH 08/11] block: Catch possible entries missing " John Garry
                   ` (3 subsequent siblings)
  10 siblings, 1 reply; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Add missing entries for req_flag_bits.

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
 block/blk-mq-debugfs.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index e37d5a2dd942..62ad3ddf0175 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -230,6 +230,11 @@ static const char *const cmd_flag_name[] = {
 	CMD_FLAG_NAME(NOWAIT),
 	CMD_FLAG_NAME(NOUNMAP),
 	CMD_FLAG_NAME(POLLED),
+	CMD_FLAG_NAME(ALLOC_CACHE),
+	CMD_FLAG_NAME(SWAP),
+	CMD_FLAG_NAME(DRV),
+	CMD_FLAG_NAME(FS_PRIVATE),
+	CMD_FLAG_NAME(NOUNMAP),
 };
 #undef CMD_FLAG_NAME
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 08/11] block: Catch possible entries missing from cmd_flag_name[]
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
                   ` (6 preceding siblings ...)
  2024-07-09 11:05 ` [PATCH 07/11] block: Add missing entries from cmd_flag_name[] John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:05 ` [PATCH 09/11] block: Make RQF_x as an enum John Garry
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Also add a BUILD_BUG_ON() call to ensure that we are not missing entries
in cmd_flag_name[].

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
 block/blk-mq-debugfs.c    | 2 ++
 include/linux/blk_types.h | 1 +
 2 files changed, 3 insertions(+)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index 62ad3ddf0175..f764b86941c3 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -278,6 +278,8 @@ int __blk_mq_debugfs_rq_show(struct seq_file *m, struct request *rq)
 	const enum req_op op = req_op(rq);
 	const char *op_str = blk_op_str(op);
 
+	BUILD_BUG_ON(ARRAY_SIZE(cmd_flag_name) != __REQ_NR_BITS);
+
 	seq_printf(m, "%p {.op=", rq);
 	if (strcmp(op_str, "UNKNOWN") == 0)
 		seq_printf(m, "%u", op);
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index 632edd71f8c6..36ed96133217 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -354,6 +354,7 @@ enum req_op {
 	REQ_OP_LAST		= (__force blk_opf_t)36,
 };
 
+/* Keep cmd_flag_name[] in sync with the definitions below */
 enum req_flag_bits {
 	__REQ_FAILFAST_DEV =	/* no driver retries of device errors */
 		REQ_OP_BITS,
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 09/11] block: Make RQF_x as an enum
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
                   ` (7 preceding siblings ...)
  2024-07-09 11:05 ` [PATCH 08/11] block: Catch possible entries missing " John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:23   ` Christoph Hellwig
  2024-07-09 11:05 ` [PATCH 10/11] block: Add zone write plugging entry to rqf_name[] John Garry
  2024-07-09 11:05 ` [PATCH 11/11] block: Catch possible entries missing from rqf_name[] John Garry
  10 siblings, 1 reply; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Make RQF_x as an enum to better order and number members.

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
Maybe we should also have an enum for bits, like:

RQF_STARTED_BIT = 0
...
RQF_STARTED = (1 << RQF_STARTED_BIT)

as RQF_MAX looks out of place in later patch
 include/linux/blk-mq.h | 66 ++++++++++++++++++++++--------------------
 1 file changed, 34 insertions(+), 32 deletions(-)

diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index aefbf93d431a..f3de4a0b5293 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -27,38 +27,40 @@ typedef enum rq_end_io_ret (rq_end_io_fn)(struct request *, blk_status_t);
  * request flags */
 typedef __u32 __bitwise req_flags_t;
 
-/* drive already may have started this one */
-#define RQF_STARTED		((__force req_flags_t)(1 << 1))
-/* request for flush sequence */
-#define RQF_FLUSH_SEQ		((__force req_flags_t)(1 << 4))
-/* merge of different types, fail separately */
-#define RQF_MIXED_MERGE		((__force req_flags_t)(1 << 5))
-/* don't call prep for this one */
-#define RQF_DONTPREP		((__force req_flags_t)(1 << 7))
-/* use hctx->sched_tags */
-#define RQF_SCHED_TAGS		((__force req_flags_t)(1 << 8))
-/* use an I/O scheduler for this request */
-#define RQF_USE_SCHED		((__force req_flags_t)(1 << 9))
-/* vaguely specified driver internal error.  Ignored by the block layer */
-#define RQF_FAILED		((__force req_flags_t)(1 << 10))
-/* don't warn about errors */
-#define RQF_QUIET		((__force req_flags_t)(1 << 11))
-/* account into disk and partition IO statistics */
-#define RQF_IO_STAT		((__force req_flags_t)(1 << 13))
-/* runtime pm request */
-#define RQF_PM			((__force req_flags_t)(1 << 15))
-/* on IO scheduler merge hash */
-#define RQF_HASHED		((__force req_flags_t)(1 << 16))
-/* track IO completion time */
-#define RQF_STATS		((__force req_flags_t)(1 << 17))
-/* Look at ->special_vec for the actual data payload instead of the
-   bio chain. */
-#define RQF_SPECIAL_PAYLOAD	((__force req_flags_t)(1 << 18))
-/* The request completion needs to be signaled to zone write pluging. */
-#define RQF_ZONE_WRITE_PLUGGING	((__force req_flags_t)(1 << 20))
-/* ->timeout has been called, don't expire again */
-#define RQF_TIMED_OUT		((__force req_flags_t)(1 << 21))
-#define RQF_RESV		((__force req_flags_t)(1 << 23))
+enum {
+	/* drive already may have started this one */
+	RQF_STARTED		=	((__force req_flags_t)(1 << 0)),
+	/* request for flush sequence */
+	RQF_FLUSH_SEQ		=	((__force req_flags_t)(1 << 1)),
+	/* merge of different types, fail separately */
+	RQF_MIXED_MERGE		=	((__force req_flags_t)(1 << 2)),
+	/* don't call prep for this one */
+	RQF_DONTPREP		=	((__force req_flags_t)(1 << 3)),
+	/* use hctx->sched_tags */
+	RQF_SCHED_TAGS		=	((__force req_flags_t)(1 << 4)),
+	/* use an I/O scheduler for this request */
+	RQF_USE_SCHED		=	((__force req_flags_t)(1 << 5)),
+	/* vaguely specified driver internal error.  Ignored by the block layer */
+	RQF_FAILED		=	((__force req_flags_t)(1 << 6)),
+	/* don't warn about errors */
+	RQF_QUIET		=	((__force req_flags_t)(1 << 7)),
+	/* account into disk and partition IO statistics */
+	RQF_IO_STAT		=	((__force req_flags_t)(1 << 8)),
+	/* runtime pm request */
+	RQF_PM			=	((__force req_flags_t)(1 << 9)),
+	/* on IO scheduler merge hash */
+	RQF_HASHED		=	((__force req_flags_t)(1 << 10)),
+	/* track IO completion time */
+	RQF_STATS		=	((__force req_flags_t)(1 << 11)),
+	/* Look at ->special_vec for the actual data payload instead of the
+	   bio chain. */
+	RQF_SPECIAL_PAYLOAD	=	((__force req_flags_t)(1 << 12)),
+	/* The request completion needs to be signaled to zone write pluging. */
+	RQF_ZONE_WRITE_PLUGGING	=	((__force req_flags_t)(1 << 13)),
+	/* ->timeout has been called, don't expire again */
+	RQF_TIMED_OUT		=	((__force req_flags_t)(1 << 14)),
+	RQF_RESV		=	((__force req_flags_t)(1 << 15)),
+};
 
 /* flags that prevent us from merging requests: */
 #define RQF_NOMERGE_FLAGS \
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 10/11] block: Add zone write plugging entry to rqf_name[]
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
                   ` (8 preceding siblings ...)
  2024-07-09 11:05 ` [PATCH 09/11] block: Make RQF_x as an enum John Garry
@ 2024-07-09 11:05 ` John Garry
  2024-07-09 11:05 ` [PATCH 11/11] block: Catch possible entries missing from rqf_name[] John Garry
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Add missing entry.

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
 block/blk-mq-debugfs.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index f764b86941c3..97741996b5f2 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -253,6 +253,7 @@ static const char *const rqf_name[] = {
 	RQF_NAME(HASHED),
 	RQF_NAME(STATS),
 	RQF_NAME(SPECIAL_PAYLOAD),
+	RQF_NAME(ZONE_WRITE_PLUGGING),
 	RQF_NAME(TIMED_OUT),
 	RQF_NAME(RESV),
 };
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 11/11] block: Catch possible entries missing from rqf_name[]
  2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
                   ` (9 preceding siblings ...)
  2024-07-09 11:05 ` [PATCH 10/11] block: Add zone write plugging entry to rqf_name[] John Garry
@ 2024-07-09 11:05 ` John Garry
  10 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:05 UTC (permalink / raw)
  To: axboe, hch; +Cc: linux-block, John Garry

Also add a BUILD_BUG_ON() call to ensure that we are not missing entries
in rqf_name[].

Signed-off-by: John Garry <john.g.garry@oracle.com>
---
 block/blk-mq-debugfs.c | 1 +
 include/linux/blk-mq.h | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
index 97741996b5f2..c829406579ee 100644
--- a/block/blk-mq-debugfs.c
+++ b/block/blk-mq-debugfs.c
@@ -280,6 +280,7 @@ int __blk_mq_debugfs_rq_show(struct seq_file *m, struct request *rq)
 	const char *op_str = blk_op_str(op);
 
 	BUILD_BUG_ON(ARRAY_SIZE(cmd_flag_name) != __REQ_NR_BITS);
+	BUILD_BUG_ON(ARRAY_SIZE(rqf_name) != RQF_MAX);
 
 	seq_printf(m, "%p {.op=", rq);
 	if (strcmp(op_str, "UNKNOWN") == 0)
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index f3de4a0b5293..928674c026b3 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -27,6 +27,7 @@ typedef enum rq_end_io_ret (rq_end_io_fn)(struct request *, blk_status_t);
  * request flags */
 typedef __u32 __bitwise req_flags_t;
 
+/* Keep rqf_name[] in sync with the definitions below */
 enum {
 	/* drive already may have started this one */
 	RQF_STARTED		=	((__force req_flags_t)(1 << 0)),
@@ -60,6 +61,7 @@ enum {
 	/* ->timeout has been called, don't expire again */
 	RQF_TIMED_OUT		=	((__force req_flags_t)(1 << 14)),
 	RQF_RESV		=	((__force req_flags_t)(1 << 15)),
+	RQF_MAX			=	16
 };
 
 /* flags that prevent us from merging requests: */
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH 09/11] block: Make RQF_x as an enum
  2024-07-09 11:05 ` [PATCH 09/11] block: Make RQF_x as an enum John Garry
@ 2024-07-09 11:23   ` Christoph Hellwig
  2024-07-09 11:51     ` John Garry
  0 siblings, 1 reply; 15+ messages in thread
From: Christoph Hellwig @ 2024-07-09 11:23 UTC (permalink / raw)
  To: John Garry; +Cc: axboe, hch, linux-block

> +enum {
> +	/* drive already may have started this one */
> +	RQF_STARTED		=	((__force req_flags_t)(1 << 0)),

Last time I tried to mix __bitwise and enums sparse was very unhappy.
Did this get fixed?


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 09/11] block: Make RQF_x as an enum
  2024-07-09 11:23   ` Christoph Hellwig
@ 2024-07-09 11:51     ` John Garry
  0 siblings, 0 replies; 15+ messages in thread
From: John Garry @ 2024-07-09 11:51 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: axboe, linux-block

On 09/07/2024 12:23, Christoph Hellwig wrote:
>> +enum {
>> +	/* drive already may have started this one */
>> +	RQF_STARTED		=	((__force req_flags_t)(1 << 0)),
> 
> Last time I tried to mix __bitwise and enums sparse was very unhappy.
> Did this get fixed?

For me, sparse only complains about RQF_MAX, which is added later.

But, as I noted, I think that needs to change to a bit count from a flag 
anyway. I am not sure how that would look, maybe:

enum {

	RQF_STARTED_BIT = 0,

	...
	RQF_MAX_BITS

};

and then use a macro to define RQF_STARTED as ((__force 
req_flags_t)(RQF_STARTED_BIT  << 0))

But do you remember how you generated the sparse warning specifically?

> 


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 07/11] block: Add missing entries from cmd_flag_name[]
  2024-07-09 11:05 ` [PATCH 07/11] block: Add missing entries from cmd_flag_name[] John Garry
@ 2024-07-09 23:08   ` kernel test robot
  0 siblings, 0 replies; 15+ messages in thread
From: kernel test robot @ 2024-07-09 23:08 UTC (permalink / raw)
  To: John Garry, axboe, hch; +Cc: oe-kbuild-all, linux-block, John Garry

Hi John,

kernel test robot noticed the following build warnings:

[auto build test WARNING on axboe-block/for-next]
[also build test WARNING on next-20240709]
[cannot apply to hch-configfs/for-next linus/master v6.10-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/John-Garry/block-remove-QUEUE_FLAG_STOPPED/20240709-191356
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next
patch link:    https://lore.kernel.org/r/20240709110538.532896-8-john.g.garry%40oracle.com
patch subject: [PATCH 07/11] block: Add missing entries from cmd_flag_name[]
config: x86_64-randconfig-r132-20240710 (https://download.01.org/0day-ci/archive/20240710/202407100611.wrfknWDf-lkp@intel.com/config)
compiler: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240710/202407100611.wrfknWDf-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202407100611.wrfknWDf-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> block/blk-mq-debugfs.c:231:9: sparse: sparse: Initializer entry defined twice
   block/blk-mq-debugfs.c:237:9: sparse:   also defined here

vim +231 block/blk-mq-debugfs.c

9abb2ad21e8b9b7 Omar Sandoval     2017-01-25  214  
1a435111f8eb30b Omar Sandoval     2017-05-04  215  #define CMD_FLAG_NAME(name) [__REQ_##name] = #name
8658dca8bd5666f Bart Van Assche   2017-04-26  216  static const char *const cmd_flag_name[] = {
1a435111f8eb30b Omar Sandoval     2017-05-04  217  	CMD_FLAG_NAME(FAILFAST_DEV),
1a435111f8eb30b Omar Sandoval     2017-05-04  218  	CMD_FLAG_NAME(FAILFAST_TRANSPORT),
1a435111f8eb30b Omar Sandoval     2017-05-04  219  	CMD_FLAG_NAME(FAILFAST_DRIVER),
1a435111f8eb30b Omar Sandoval     2017-05-04  220  	CMD_FLAG_NAME(SYNC),
1a435111f8eb30b Omar Sandoval     2017-05-04  221  	CMD_FLAG_NAME(META),
1a435111f8eb30b Omar Sandoval     2017-05-04  222  	CMD_FLAG_NAME(PRIO),
1a435111f8eb30b Omar Sandoval     2017-05-04  223  	CMD_FLAG_NAME(NOMERGE),
1a435111f8eb30b Omar Sandoval     2017-05-04  224  	CMD_FLAG_NAME(IDLE),
1a435111f8eb30b Omar Sandoval     2017-05-04  225  	CMD_FLAG_NAME(INTEGRITY),
1a435111f8eb30b Omar Sandoval     2017-05-04  226  	CMD_FLAG_NAME(FUA),
1a435111f8eb30b Omar Sandoval     2017-05-04  227  	CMD_FLAG_NAME(PREFLUSH),
1a435111f8eb30b Omar Sandoval     2017-05-04  228  	CMD_FLAG_NAME(RAHEAD),
1a435111f8eb30b Omar Sandoval     2017-05-04  229  	CMD_FLAG_NAME(BACKGROUND),
22d538213ec4fa6 Bart Van Assche   2017-08-18  230  	CMD_FLAG_NAME(NOWAIT),
1c26010c5e1b9ad Jianchao Wang     2019-01-24 @231  	CMD_FLAG_NAME(NOUNMAP),
6ce913fe3eee14f Christoph Hellwig 2021-10-12  232  	CMD_FLAG_NAME(POLLED),
6c56c597270e732 John Garry        2024-07-09  233  	CMD_FLAG_NAME(ALLOC_CACHE),
6c56c597270e732 John Garry        2024-07-09  234  	CMD_FLAG_NAME(SWAP),
6c56c597270e732 John Garry        2024-07-09  235  	CMD_FLAG_NAME(DRV),
6c56c597270e732 John Garry        2024-07-09  236  	CMD_FLAG_NAME(FS_PRIVATE),
6c56c597270e732 John Garry        2024-07-09  237  	CMD_FLAG_NAME(NOUNMAP),
8658dca8bd5666f Bart Van Assche   2017-04-26  238  };
1a435111f8eb30b Omar Sandoval     2017-05-04  239  #undef CMD_FLAG_NAME
8658dca8bd5666f Bart Van Assche   2017-04-26  240  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2024-07-09 23:08 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-09 11:05 [PATCH RFC 00/11] block debugfs: Catch missing flag array members John Garry
2024-07-09 11:05 ` [PATCH 01/11] block: remove QUEUE_FLAG_STOPPED John Garry
2024-07-09 11:05 ` [PATCH 02/11] block: Make QUEUE_FLAG_x as an enum John Garry
2024-07-09 11:05 ` [PATCH 03/11] block: Add build-time assert for size of blk_queue_flag_name[] John Garry
2024-07-09 11:05 ` [PATCH 04/11] block: Catch possible entries missing from hctx_state_name[] John Garry
2024-07-09 11:05 ` [PATCH 05/11] block: Catch possible entries missing from hctx_flag_name[] John Garry
2024-07-09 11:05 ` [PATCH 06/11] block: Catch possible entries missing from alloc_policy_name[] John Garry
2024-07-09 11:05 ` [PATCH 07/11] block: Add missing entries from cmd_flag_name[] John Garry
2024-07-09 23:08   ` kernel test robot
2024-07-09 11:05 ` [PATCH 08/11] block: Catch possible entries missing " John Garry
2024-07-09 11:05 ` [PATCH 09/11] block: Make RQF_x as an enum John Garry
2024-07-09 11:23   ` Christoph Hellwig
2024-07-09 11:51     ` John Garry
2024-07-09 11:05 ` [PATCH 10/11] block: Add zone write plugging entry to rqf_name[] John Garry
2024-07-09 11:05 ` [PATCH 11/11] block: Catch possible entries missing from rqf_name[] John Garry

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.