]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/ublk: fix error handling for starting device
authorMing Lei <ming.lei@redhat.com>
Tue, 13 Jan 2026 08:58:01 +0000 (16:58 +0800)
committerJens Axboe <axboe@kernel.dk>
Wed, 21 Jan 2026 14:54:55 +0000 (07:54 -0700)
Fix error handling in ublk_start_daemon() when start_dev fails:

1. Call ublk_ctrl_stop_dev() to cancel inflight uring_cmd before
   cleanup. Without this, the device deletion may hang waiting for
   I/O completion that will never happen.

2. Add fail_start label so that pthread_join() is called on the
   error path. This ensures proper thread cleanup when startup fails.

Fixes: 6aecda00b7d1 ("selftests: ublk: add kernel selftests for ublk")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
tools/testing/selftests/ublk/kublk.c

index f52431fe9b6cb90199796117a28526160dd71874..65f59e7b697253f688d005cf9dbb18e5547fd496 100644 (file)
@@ -1054,7 +1054,9 @@ static int ublk_start_daemon(const struct dev_ctx *ctx, struct ublk_dev *dev)
        }
        if (ret < 0) {
                ublk_err("%s: ublk_ctrl_start_dev failed: %d\n", __func__, ret);
-               goto fail;
+               /* stop device so that inflight uring_cmd can be cancelled */
+               ublk_ctrl_stop_dev(dev);
+               goto fail_start;
        }
 
        ublk_ctrl_get_info(dev);
@@ -1062,7 +1064,7 @@ static int ublk_start_daemon(const struct dev_ctx *ctx, struct ublk_dev *dev)
                ublk_ctrl_dump(dev);
        else
                ublk_send_dev_event(ctx, dev, dev->dev_info.dev_id);
-
+fail_start:
        /* wait until we are terminated */
        for (i = 0; i < dev->nthreads; i++)
                pthread_join(tinfo[i].thread, &thread_ret);