summaryrefslogtreecommitdiffstats
path: root/drivers/block/loop.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2025-01-10 08:37:37 +0100
committerJens Axboe <axboe@kernel.dk>2025-01-10 15:31:50 +0100
commit0cd719aa63def1d57316e8e903f01f4af0641a46 (patch)
treea4b7c0ebd8262c84c5ebcf6cec504ea0260e3c3a /drivers/block/loop.c
parentloop: allow loop_set_status to re-enable direct I/O (diff)
downloadlinux-0cd719aa63def1d57316e8e903f01f4af0641a46.tar.xz
linux-0cd719aa63def1d57316e8e903f01f4af0641a46.zip
loop: don't freeze the queue in loop_update_dio
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>
Diffstat (limited to 'drivers/block/loop.c')
-rw-r--r--drivers/block/loop.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index 2e1f8aa045a9..acb1a0cdfb27 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -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);
}
/**