On Mon, Jul 01, 2024 at 03:02:49PM -0600, Uday Shankar wrote: > On Sun, Jun 30, 2024 at 09:56:36PM +0800, Ming Lei wrote: > > I meant that the following one-line patch may address your issue: > > > > > > diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c > > index 4e159948c912..a89240f4f7b0 100644 > > --- a/drivers/block/ublk_drv.c > > +++ b/drivers/block/ublk_drv.c > > @@ -1068,7 +1068,7 @@ static inline void __ublk_abort_rq(struct ublk_queue *ubq, > > struct request *rq) > > { > > /* We cannot process this rq so just requeue it. */ > > - if (ublk_queue_can_use_recovery(ubq)) > > + if (ublk_queue_can_use_recovery_reissue(ubq)) > > blk_mq_requeue_request(rq, false); > > else > > blk_mq_end_request(rq, BLK_STS_IOERR); > > It does not work (ran the same test from my previous email, got the same > results), and how could it? As I've already mentioned several times, the > root of the issue is that when UBLK_F_USER_RECOVERY is set, the request > queue remains quiesced when the server has exited. Quiescing the queue > means that the block layer will not call the driver's queue_rq when I/Os > are submitted. Instead the block layer will queue those I/Os internally, > only submitting them to the driver when the queue is unquiesced, which, > in the current ublk_drv, only happens when the device is recovered or > deleted. > > Having ublk_drv return errors to I/Os issued while there is no ublk > server requires the queue to be unquiesced. My patchset actually does > this (see patch 4/4). Sorry for ignoring the fact that queue is kept as quiesced after ublk server is crashed, and I will review patch 4 soon. Thanks, Ming