From: Ming Lei <tom.leiming@gmail.com>
To: linux-block@vger.kernel.org
Cc: Ming Lei <tom.leiming@gmail.com>, Jens Axboe <axboe@kernel.dk>,
Caleb Sander Mateos <csander@purestorage.com>,
Josef Bacik <josef@toxicpanda.com>
Subject: [PATCH 0/8] ublk: don't dispatch to canceled io commands
Date: Thu, 1 Oct 2026 07:54:14 -0500 [thread overview]
Message-ID: <20261001125422.1364260-1-tom.leiming@gmail.com> (raw)
Hi,
Josef reported three ways in which ublk dispatches a request to a
canceled io command, which oopses on the NULL io->cmd in
ublk_queue_cmd() [1]:
1) STOP_DEV, then START_DEV
2) partial FETCH: a task fetches some tags and exits, then another task
fetches the rest
3) user recovery: one queue's task exits before all queues are ready
This series fixes them in a simpler way, without extra locking in the
I/O path:
- patch 1: a FETCH round which saw a cancel stays canceling until the
server is gone (2, 3)
- patch 2-3: an io command is marked cancelable before it is published
- patch 4-6: the release resets the FETCH round, also without a disk
and under ub->mutex; STOP_DEV holds a reference on /dev/ublkcN while
it cancels, so no START_DEV, FETCH or new server can slip in (1)
- patch 7-8: selftest
Tested with all ublk selftests, plus KASAN and lockdep.
[1] https://lore.kernel.org/linux-block/20260928-b4-ublk-cancel-stop-v1-0-4a4360232a46@toxicpanda.com/
Thanks,
Ming
Ming Lei (8):
ublk: keep a canceled FETCH round canceling until the server is gone
ublk: mark the io command cancelable before publishing it
ublk: mark the batch fetch command cancelable before linking it
ublk: reset the FETCH round in release also without a disk
ublk: reset the FETCH round under ub->mutex
ublk: let STOP_DEV cancel the server's commands before its release
selftests: ublk: move the control command helpers into ctrl.c
selftests: ublk: add test for going live over canceled io commands
drivers/block/ublk_drv.c | 206 +++-
tools/testing/selftests/ublk/.gitignore | 1 +
tools/testing/selftests/ublk/Makefile | 6 +-
tools/testing/selftests/ublk/ctrl.c | 268 +++++
tools/testing/selftests/ublk/kublk.c | 271 -----
tools/testing/selftests/ublk/kublk.h | 32 +
.../testing/selftests/ublk/test_generic_18.sh | 37 +
.../selftests/ublk/ublk_cancel_ready.c | 984 ++++++++++++++++++
8 files changed, 1484 insertions(+), 321 deletions(-)
create mode 100644 tools/testing/selftests/ublk/ctrl.c
create mode 100755 tools/testing/selftests/ublk/test_generic_18.sh
create mode 100644 tools/testing/selftests/ublk/ublk_cancel_ready.c
--
2.55.0
next reply other threads:[~2026-10-01 12:54 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-01 12:54 Ming Lei [this message]
2026-10-01 12:54 ` [PATCH 1/8] ublk: keep a canceled FETCH round canceling until the server is gone Ming Lei
2026-10-01 12:54 ` [PATCH 2/8] ublk: mark the io command cancelable before publishing it Ming Lei
2026-10-01 12:54 ` [PATCH 3/8] ublk: mark the batch fetch command cancelable before linking it Ming Lei
2026-10-01 12:54 ` [PATCH 4/8] ublk: reset the FETCH round in release also without a disk Ming Lei
2026-10-01 12:54 ` [PATCH 5/8] ublk: reset the FETCH round under ub->mutex Ming Lei
2026-10-01 12:54 ` [PATCH 6/8] ublk: let STOP_DEV cancel the server's commands before its release Ming Lei
2026-10-01 12:54 ` [PATCH 7/8] selftests: ublk: move the control command helpers into ctrl.c Ming Lei
2026-10-01 12:54 ` [PATCH 8/8] selftests: ublk: add test for going live over canceled io commands Ming Lei
2026-10-05 16:23 ` [PATCH] ublk: refuse to go live after an io command was canceled Josef Bacik
2026-10-06 14:14 ` Ming Lei
2026-10-05 16:23 ` [PATCH v2] " Josef Bacik
2026-10-05 18:50 ` [PATCH 0/8] ublk: don't dispatch to canceled io commands Josef Bacik
2026-10-06 16:10 ` [PATCH 0/4] ublk: fix UBLK_CMD_QUIESCE_DEV leaving commands behind Josef Bacik
2026-10-06 13:05 ` [PATCH 1/4] ublk: don't cancel commands in QUIESCE_DEV on a device that isn't live Josef Bacik
2026-10-06 14:49 ` [PATCH 2/4] ublk: drop QUIESCE_DEV's wait for an idle command Josef Bacik
2026-10-06 14:50 ` [PATCH 3/4] ublk: give the command back from COMMIT_AND_FETCH on a canceling queue Josef Bacik
2026-10-06 14:50 ` [PATCH 4/4] ublk: keep canceling in QUIESCE_DEV until the server's commands are taken Josef Bacik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261001125422.1364260-1-tom.leiming@gmail.com \
--to=tom.leiming@gmail.com \
--cc=axboe@kernel.dk \
--cc=csander@purestorage.com \
--cc=josef@toxicpanda.com \
--cc=linux-block@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox