]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
block: remove QUEUE_FLAG_DEAD
authorChristoph Hellwig <hch@lst.de>
Sun, 19 Jun 2022 06:05:49 +0000 (08:05 +0200)
committerJens Axboe <axboe@kernel.dk>
Tue, 28 Jun 2022 12:30:26 +0000 (06:30 -0600)
Disallow setting the blk-mq state on any queue that is already dying as
setting the state even then is a bad idea, and remove the now unused
QUEUE_FLAG_DEAD flag.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Link: https://lore.kernel.org/r/20220619060552.1850436-4-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c
block/blk-mq-debugfs.c
include/linux/blkdev.h

index c2cec402d01c04157afe44cfd3919d1fecad7636..f86df390afad9fc79c428f11a37baae8bae9ae86 100644 (file)
@@ -313,9 +313,6 @@ void blk_cleanup_queue(struct request_queue *q)
         * after draining finished.
         */
        blk_freeze_queue(q);
-
-       blk_queue_flag_set(QUEUE_FLAG_DEAD, q);
-
        blk_sync_queue(q);
        if (queue_is_mq(q)) {
                blk_mq_cancel_work_sync(q);
index 4d1ce9ef4318789e968586a3f5e6af4b5b80f3bf..b80fae7ab1d95036c247bbec3cd57da58697de67 100644 (file)
@@ -116,7 +116,6 @@ static const char *const blk_queue_flag_name[] = {
        QUEUE_FLAG_NAME(NOXMERGES),
        QUEUE_FLAG_NAME(ADD_RANDOM),
        QUEUE_FLAG_NAME(SAME_FORCE),
-       QUEUE_FLAG_NAME(DEAD),
        QUEUE_FLAG_NAME(INIT_DONE),
        QUEUE_FLAG_NAME(STABLE_WRITES),
        QUEUE_FLAG_NAME(POLL),
@@ -151,11 +150,10 @@ static ssize_t queue_state_write(void *data, const char __user *buf,
        char opbuf[16] = { }, *op;
 
        /*
-        * The "state" attribute is removed after blk_cleanup_queue() has called
-        * blk_mq_free_queue(). Return if QUEUE_FLAG_DEAD has been set to avoid
-        * triggering a use-after-free.
+        * The "state" attribute is removed when the queue is removed.  Don't
+        * allow setting the state on a dying queue to avoid a use-after-free.
         */
-       if (blk_queue_dead(q))
+       if (blk_queue_dying(q))
                return -ENOENT;
 
        if (count >= sizeof(opbuf)) {
index b2d42201bd5d96410d3926cce7a96200779e0881..f4632f4fe8848f0bda61a414033dac3cabd3571d 100644 (file)
@@ -564,7 +564,6 @@ struct request_queue {
 #define QUEUE_FLAG_NOXMERGES   9       /* No extended merges */
 #define QUEUE_FLAG_ADD_RANDOM  10      /* Contributes to random pool */
 #define QUEUE_FLAG_SAME_FORCE  12      /* force complete on same CPU */
-#define QUEUE_FLAG_DEAD                13      /* queue tear-down finished */
 #define QUEUE_FLAG_INIT_DONE   14      /* queue is initialized */
 #define QUEUE_FLAG_STABLE_WRITES 15    /* don't modify blks until WB is done */
 #define QUEUE_FLAG_POLL                16      /* IO polling enabled if set */
@@ -592,7 +591,6 @@ bool blk_queue_flag_test_and_set(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_has_srcu(q)  test_bit(QUEUE_FLAG_HAS_SRCU, &(q)->queue_flags)
-#define blk_queue_dead(q)      test_bit(QUEUE_FLAG_DEAD, &(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)
 #define blk_queue_noxmerges(q) \