Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30be971f authored by Martijn Coenen's avatar Martijn Coenen Committed by Alistair Delva
Browse files

UPSTREAM: loop: Only freeze block queue when needed.



__loop_update_dio() can be called as a part of loop_set_fd(), when the
block queue is not yet up and running; avoid freezing the block queue in
that case, since that is an expensive operation.

Bug: 148607611
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: default avatarMartijn Coenen <maco@android.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
(cherry picked from commit 0fbcf57982346763ec636f176d5afaa367b5f71b)
Change-Id: I17d8de6b6b54a667703d60ea1c62449bb14331da
parent 456ce3aa
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -213,6 +213,7 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
	 * 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) {
@@ -222,6 +223,7 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
		blk_queue_flag_set(QUEUE_FLAG_NOMERGES, lo->lo_queue);
		lo->lo_flags &= ~LO_FLAGS_DIRECT_IO;
	}
	if (lo->lo_state == Lo_bound)
		blk_mq_unfreeze_queue(lo->lo_queue);
}