]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
loop: don't freeze the queue in loop_update_dio
authorChristoph Hellwig <hch@lst.de>
Fri, 10 Jan 2025 07:37:37 +0000 (08:37 +0100)
committerJens Axboe <axboe@kernel.dk>
Fri, 10 Jan 2025 14:31:50 +0000 (07:31 -0700)
All callers of loop_update_dio except for loop_configure already have the
queue frozen, and loop_configure works on an unbound device.  Remove the
superfluous recursive freezing in loop_update_dio and add asserts for the
locking and freezing state instead.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20250110073750.1582447-8-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/loop.c

index 2e1f8aa045a903adb35c479626793d9d911300b4..acb1a0cdfb271eae65ffae91fa54bcb7430e91cf 100644 (file)
@@ -201,6 +201,10 @@ static inline void loop_update_dio(struct loop_device *lo)
        bool dio = lo->use_dio || (lo->lo_backing_file->f_flags & O_DIRECT);
        bool use_dio = dio && lo_can_use_dio(lo);
 
+       lockdep_assert_held(&lo->lo_mutex);
+       WARN_ON_ONCE(lo->lo_state == Lo_bound &&
+                    lo->lo_queue->mq_freeze_depth == 0);
+
        if (lo->use_dio == use_dio)
                return;
 
@@ -213,15 +217,11 @@ static inline void loop_update_dio(struct loop_device *lo)
         * LO_FLAGS_READ_ONLY, both are set from kernel, and losetup
         * will get updated by ioctl(LOOP_GET_STATUS)
         */
-       if (lo->lo_state == Lo_bound)
-               blk_mq_freeze_queue(lo->lo_queue);
        lo->use_dio = use_dio;
        if (use_dio)
                lo->lo_flags |= LO_FLAGS_DIRECT_IO;
        else
                lo->lo_flags &= ~LO_FLAGS_DIRECT_IO;
-       if (lo->lo_state == Lo_bound)
-               blk_mq_unfreeze_queue(lo->lo_queue);
 }
 
 /**