* [PATCH] sunvdc: fix -EIO issue due to lack of retries
@ 2025-10-06 14:59 Jens Axboe
2025-10-07 11:52 ` shinichiro.kawasaki
0 siblings, 1 reply; 2+ messages in thread
From: Jens Axboe @ 2025-10-06 14:59 UTC (permalink / raw)
To: linux-block@vger.kernel.org, John Paul Adrian Glaubitz
John reports that since commit:
a11f6ca9aef9 ("sunvdc: Do not spin in an infinite loop when vio_ldc_send() returns EAGAIN")
users of Linux inside Solaris ldom see occasional -EIO errors because
the request send loop now times out. The current loop does 10 retries,
and inside vio_ldc_send() a further 1000 1usec retries are done as well.
Even with 10.5 msec of busy loop retries that's apparently not enough to
always succeed.
Rather than introduce continued busy looping, requeue the request and
have the delayed queue kicking retry the request after another 10ms.
This obviously isn't ideal, but there's seemingly no way to wait for
this type of event. And if 10ms of busy looping was not enough to make
progress, then presumably this is an edge condition and we just need to
guarantee to make forward progress at some later point in time. That's
more suitably done through letting the CPU tend to other work, rather
than sitting in a tight loop retrying.
Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Link: https://lore.kernel.org/all/20251006100226.4246-2-glaubitz@physik.fu-berlin.de/
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
Caveat: 100% untested, not even compiled. Sending out on John's behest.
diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
index db1fe9772a4d..aa49dffb1b53 100644
--- a/drivers/block/sunvdc.c
+++ b/drivers/block/sunvdc.c
@@ -539,6 +539,7 @@ static blk_status_t vdc_queue_rq(struct blk_mq_hw_ctx *hctx,
struct vdc_port *port = hctx->queue->queuedata;
struct vio_dring_state *dr;
unsigned long flags;
+ int ret;
dr = &port->vio.drings[VIO_DRIVER_TX_RING];
@@ -560,7 +561,13 @@ static blk_status_t vdc_queue_rq(struct blk_mq_hw_ctx *hctx,
return BLK_STS_DEV_RESOURCE;
}
- if (__send_request(bd->rq) < 0) {
+ ret = __send_request(bd->rq);
+ if (ret == -EAGAIN) {
+ spin_unlock_irqrestore(&port->vio.lock, flags);
+ /* already spun for 10msec, defer 10msec and retry */
+ blk_mq_delay_kick_requeue_list(hctx->queue, 10);
+ return BLK_STS_DEV_RESOURCE;
+ } else if (ret < 0) {
spin_unlock_irqrestore(&port->vio.lock, flags);
return BLK_STS_IOERR;
}
--
Jens Axboe
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] sunvdc: fix -EIO issue due to lack of retries
2025-10-06 14:59 [PATCH] sunvdc: fix -EIO issue due to lack of retries Jens Axboe
@ 2025-10-07 11:52 ` shinichiro.kawasaki
0 siblings, 0 replies; 2+ messages in thread
From: shinichiro.kawasaki @ 2025-10-07 11:52 UTC (permalink / raw)
To: linux-block; +Cc: shinichiro.kawasaki, dennis.maisenbacher
[-- Attachment #1: Type: text/plain, Size: 338 bytes --]
Dear patch submitter,
Blktests CI has tested the following submission:
Status: FAILURE
Name: sunvdc: fix -EIO issue due to lack of retries
Patchwork: https://patchwork.kernel.org/project/linux-block/list/?series=1008721&state=*
Run record: https://github.com/linux-blktests/linux-block/actions/runs/18285324490
No failure
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-10-07 11:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-06 14:59 [PATCH] sunvdc: fix -EIO issue due to lack of retries Jens Axboe
2025-10-07 11:52 ` shinichiro.kawasaki
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox