On Thu, May 18, 2023 at 02:01:17AM +0000, Shinichiro Kawasaki wrote: > On May 17, 2023 / 21:34, Ming Lei wrote: > > When handling UBLK_IO_FETCH_REQ, ctx->uring_lock is grabbed first, then > > ub->mutex is acquired. > > > > When handling UBLK_CMD_STOP_DEV or UBLK_CMD_DEL_DEV, ub->mutex is > > grabbed first, then calling io_uring_cmd_done() for canceling uring > > command, in which ctx->uring_lock may be required. > > > > Real deadlock only happens when all the above commands are issued from > > same uring context, and in reality different uring contexts are often used > > for handing control command and IO command. > > > > Fix the issue by using io_uring_cmd_complete_in_task() to cancel command > > in ublk_cancel_dev(ublk_cancel_queue). > > > > Reported-by: Shinichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> > > Closes: https://lore.kernel.org/linux-block/becol2g7sawl4rsjq2dztsbc7mqypfqko6wzsyoyazqydoasml@rcxarzwidrhk > > Cc: Ziyang Zhang <ZiyangZhang@xxxxxxxxxxxxxxxxx> > > Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> > > Using Ziyang's new blktests test cases, I confirmed this patch avoids the > failure I reported. Thanks. > > Tested-by: Shinichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> Shinichiro, Thanks for the test! -- Ming