diff mbox series

block/mq-deadline: Fix a bug in deadline_from_pos()

Message ID 20230712173344.2994513-1-bvanassche@acm.org (mailing list archive)
State New, archived
Headers show
Series block/mq-deadline: Fix a bug in deadline_from_pos() | expand

Commit Message

Bart Van Assche July 12, 2023, 5:33 p.m. UTC
A bug was introduced in deadline_from_pos() while implementing the
suggestion to use round_down() in the following code:

	pos -= bdev_offset_from_zone_start(rq->q->disk->part0, pos);

This patch makes deadline_from_pos() use round_down() such that 'pos' is
rounded down.

Reported-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Closes: https://lore.kernel.org/all/5zthzi3lppvcdp4nemum6qck4gpqbdhvgy4k3qwguhgzxc4quj@amulvgycq67h/
Cc: Christoph Hellwig <hch@lst.de>
Cc: Damien Le Moal <dlemoal@kernel.org>
Fixes: 0effb390c4ba ("block: mq-deadline: Handle requeued requests correctly")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 block/mq-deadline.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Shinichiro Kawasaki July 12, 2023, 11:47 p.m. UTC | #1
On Jul 12, 2023 / 10:33, Bart Van Assche wrote:
> A bug was introduced in deadline_from_pos() while implementing the
> suggestion to use round_down() in the following code:
> 
> 	pos -= bdev_offset_from_zone_start(rq->q->disk->part0, pos);
> 
> This patch makes deadline_from_pos() use round_down() such that 'pos' is
> rounded down.
> 
> Reported-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
> Closes: https://lore.kernel.org/all/5zthzi3lppvcdp4nemum6qck4gpqbdhvgy4k3qwguhgzxc4quj@amulvgycq67h/
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Damien Le Moal <dlemoal@kernel.org>
> Fixes: 0effb390c4ba ("block: mq-deadline: Handle requeued requests correctly")
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>

Thanks for the fix. I confirmed that it avoids the I/O error using a zoned
null_blk device, a QEMU ZNS emulation device and a real ZNS drive.

Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Jens Axboe July 13, 2023, 1:43 a.m. UTC | #2
On Wed, 12 Jul 2023 10:33:43 -0700, Bart Van Assche wrote:
> A bug was introduced in deadline_from_pos() while implementing the
> suggestion to use round_down() in the following code:
> 
> 	pos -= bdev_offset_from_zone_start(rq->q->disk->part0, pos);
> 
> This patch makes deadline_from_pos() use round_down() such that 'pos' is
> rounded down.
> 
> [...]

Applied, thanks!

[1/1] block/mq-deadline: Fix a bug in deadline_from_pos()
      (no commit info)

Best regards,
diff mbox series

Patch

diff --git a/block/mq-deadline.c b/block/mq-deadline.c
index 0bed2bdeed89..f783ed71ae19 100644
--- a/block/mq-deadline.c
+++ b/block/mq-deadline.c
@@ -176,7 +176,7 @@  static inline struct request *deadline_from_pos(struct dd_per_prio *per_prio,
 	 * zoned writes, start searching from the start of a zone.
 	 */
 	if (blk_rq_is_seq_zoned_write(rq))
-		pos -= round_down(pos, rq->q->limits.chunk_sectors);
+		pos = round_down(pos, rq->q->limits.chunk_sectors);
 
 	while (node) {
 		rq = rb_entry_rq(node);