]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests: ublk: add helper ublk_handle_uring_cmd() for handle ublk command
authorMing Lei <ming.lei@redhat.com>
Sun, 13 Jul 2025 14:34:11 +0000 (22:34 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 15 Jul 2025 14:04:17 +0000 (08:04 -0600)
Add helper ublk_handle_uring_cmd() for handling ublk command, and make
ublk_handle_cqe() more readable.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250713143415.2857561-17-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
tools/testing/selftests/ublk/kublk.c

index 84307bc12f37fc8e3fab6bd8c11adb07e11a049a..95188065b2e984b51a958c257abd1287e69b6a2d 100644 (file)
@@ -718,36 +718,14 @@ static inline void ublksrv_handle_tgt_cqe(struct ublk_thread *t,
                q->tgt_ops->tgt_io_done(t, q, cqe);
 }
 
-static void ublk_handle_cqe(struct ublk_thread *t,
-               struct io_uring_cqe *cqe, void *data)
+static void ublk_handle_uring_cmd(struct ublk_thread *t,
+                                 struct ublk_queue *q,
+                                 const struct io_uring_cqe *cqe)
 {
-       struct ublk_dev *dev = t->dev;
-       unsigned q_id = user_data_to_q_id(cqe->user_data);
-       struct ublk_queue *q = &dev->q[q_id];
-       unsigned tag = user_data_to_tag(cqe->user_data);
-       unsigned cmd_op = user_data_to_op(cqe->user_data);
        int fetch = (cqe->res != UBLK_IO_RES_ABORT) &&
                !(t->state & UBLKS_T_STOPPING);
-       struct ublk_io *io;
-
-       if (cqe->res < 0 && cqe->res != -ENODEV)
-               ublk_err("%s: res %d userdata %llx queue state %x\n", __func__,
-                               cqe->res, cqe->user_data, q->flags);
-
-       ublk_dbg(UBLK_DBG_IO_CMD, "%s: res %d (qid %d tag %u cmd_op %u target %d/%d) stopping %d\n",
-                       __func__, cqe->res, q->q_id, tag, cmd_op,
-                       is_target_io(cqe->user_data),
-                       user_data_to_tgt_data(cqe->user_data),
-                       (t->state & UBLKS_T_STOPPING));
-
-       /* Don't retrieve io in case of target io */
-       if (is_target_io(cqe->user_data)) {
-               ublksrv_handle_tgt_cqe(t, q, cqe);
-               return;
-       }
-
-       io = &q->ios[tag];
-       t->cmd_inflight--;
+       unsigned tag = user_data_to_tag(cqe->user_data);
+       struct ublk_io *io = &q->ios[tag];
 
        if (!fetch) {
                t->state |= UBLKS_T_STOPPING;
@@ -774,6 +752,35 @@ static void ublk_handle_cqe(struct ublk_thread *t,
        }
 }
 
+static void ublk_handle_cqe(struct ublk_thread *t,
+               struct io_uring_cqe *cqe, void *data)
+{
+       struct ublk_dev *dev = t->dev;
+       unsigned q_id = user_data_to_q_id(cqe->user_data);
+       struct ublk_queue *q = &dev->q[q_id];
+       unsigned cmd_op = user_data_to_op(cqe->user_data);
+
+       if (cqe->res < 0 && cqe->res != -ENODEV)
+               ublk_err("%s: res %d userdata %llx queue state %x\n", __func__,
+                               cqe->res, cqe->user_data, q->flags);
+
+       ublk_dbg(UBLK_DBG_IO_CMD, "%s: res %d (qid %d tag %u cmd_op %u target %d/%d) stopping %d\n",
+                       __func__, cqe->res, q->q_id, user_data_to_tag(cqe->user_data),
+                       cmd_op, is_target_io(cqe->user_data),
+                       user_data_to_tgt_data(cqe->user_data),
+                       (t->state & UBLKS_T_STOPPING));
+
+       /* Don't retrieve io in case of target io */
+       if (is_target_io(cqe->user_data)) {
+               ublksrv_handle_tgt_cqe(t, q, cqe);
+               return;
+       }
+
+       t->cmd_inflight--;
+
+       ublk_handle_uring_cmd(t, q, cqe);
+}
+
 static int ublk_reap_events_uring(struct ublk_thread *t)
 {
        struct io_uring_cqe *cqe;