Message ID | 20200310130654.92205-1-maco@android.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | loop: Only freeze block queue when needed. | expand |
On Tue, Mar 10, 2020 at 02:06:54PM +0100, Martijn Coenen wrote: > __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. > > Signed-off-by: Martijn Coenen <maco@android.com> Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
Looks good to me. Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> On 03/10/2020 06:07 AM, Martijn Coenen wrote: > __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. > > Signed-off-by: Martijn Coenen<maco@android.com>
On 3/10/20 7:06 AM, Martijn Coenen wrote: > __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. Applied, thanks.
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 739b372a5112..c1c844ad6b1a 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -214,7 +214,8 @@ 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) */ - blk_mq_freeze_queue(lo->lo_queue); + if (lo->lo_state == Lo_bound) + blk_mq_freeze_queue(lo->lo_queue); lo->use_dio = use_dio; if (use_dio) { blk_queue_flag_clear(QUEUE_FLAG_NOMERGES, lo->lo_queue); @@ -223,7 +224,8 @@ 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; } - blk_mq_unfreeze_queue(lo->lo_queue); + if (lo->lo_state == Lo_bound) + blk_mq_unfreeze_queue(lo->lo_queue); } static int
__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. Signed-off-by: Martijn Coenen <maco@android.com> --- drivers/block/loop.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)