Re: [PATCH] block: mq-deadline: Fix dd_finish_request() for zoned devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 05, 2023 at 01:07:56PM +0900, Damien Le Moal wrote:
> commit 2820e5d0820ac4daedff1272616a53d9c7682fd2 upstream.
> 
> dd_finish_request() tests if the per prio fifo_list is not empty to
> determine if request dispatching must be restarted for handling blocked
> write requests to zoned devices with a call to
> blk_mq_sched_mark_restart_hctx(). While simple, this implementation has
> 2 problems:
> 
> 1) Only the priority level of the completed request is considered.
>    However, writes to a zone may be blocked due to other writes to the
>    same zone using a different priority level. While this is unlikely to
>    happen in practice, as writing a zone with different IO priorirites
>    does not make sense, nothing in the code prevents this from
>    happening.
> 2) The use of list_empty() is dangerous as dd_finish_request() does not
>    take dd->lock and may run concurrently with the insert and dispatch
>    code.
> 
> Fix these 2 problems by testing the write fifo list of all priority
> levels using the new helper dd_has_write_work(), and by testing each
> fifo list using list_empty_careful().
> 
> Fixes: c807ab520fc3 ("block/mq-deadline: Add I/O priority support")
> Cc: <stable@xxxxxxxxxxxxxxx>
> Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx>
> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
> Link: https://lore.kernel.org/r/20221124021208.242541-2-damien.lemoal@xxxxxxxxxxxxxxxxxx
> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
> ---
>  block/mq-deadline.c | 18 +++++++++++++++---
>  1 file changed, 15 insertions(+), 3 deletions(-)

Now queued up, thanks.

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux