Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: ublk: add helper ublk_handle_uring_cmd() for handle ublk command

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>

authored by

Ming Lei and committed by
Jens Axboe
c1dc9b0d a66f8901

+34 -27
+34 -27
tools/testing/selftests/ublk/kublk.c
··· 718 718 q->tgt_ops->tgt_io_done(t, q, cqe); 719 719 } 720 720 721 - static void ublk_handle_cqe(struct ublk_thread *t, 722 - struct io_uring_cqe *cqe, void *data) 721 + static void ublk_handle_uring_cmd(struct ublk_thread *t, 722 + struct ublk_queue *q, 723 + const struct io_uring_cqe *cqe) 723 724 { 724 - struct ublk_dev *dev = t->dev; 725 - unsigned q_id = user_data_to_q_id(cqe->user_data); 726 - struct ublk_queue *q = &dev->q[q_id]; 727 - unsigned tag = user_data_to_tag(cqe->user_data); 728 - unsigned cmd_op = user_data_to_op(cqe->user_data); 729 725 int fetch = (cqe->res != UBLK_IO_RES_ABORT) && 730 726 !(t->state & UBLKS_T_STOPPING); 731 - struct ublk_io *io; 732 - 733 - if (cqe->res < 0 && cqe->res != -ENODEV) 734 - ublk_err("%s: res %d userdata %llx queue state %x\n", __func__, 735 - cqe->res, cqe->user_data, q->flags); 736 - 737 - ublk_dbg(UBLK_DBG_IO_CMD, "%s: res %d (qid %d tag %u cmd_op %u target %d/%d) stopping %d\n", 738 - __func__, cqe->res, q->q_id, tag, cmd_op, 739 - is_target_io(cqe->user_data), 740 - user_data_to_tgt_data(cqe->user_data), 741 - (t->state & UBLKS_T_STOPPING)); 742 - 743 - /* Don't retrieve io in case of target io */ 744 - if (is_target_io(cqe->user_data)) { 745 - ublksrv_handle_tgt_cqe(t, q, cqe); 746 - return; 747 - } 748 - 749 - io = &q->ios[tag]; 750 - t->cmd_inflight--; 727 + unsigned tag = user_data_to_tag(cqe->user_data); 728 + struct ublk_io *io = &q->ios[tag]; 751 729 752 730 if (!fetch) { 753 731 t->state |= UBLKS_T_STOPPING; ··· 750 772 * */ 751 773 io->flags = UBLKS_IO_FREE; 752 774 } 775 + } 776 + 777 + static void ublk_handle_cqe(struct ublk_thread *t, 778 + struct io_uring_cqe *cqe, void *data) 779 + { 780 + struct ublk_dev *dev = t->dev; 781 + unsigned q_id = user_data_to_q_id(cqe->user_data); 782 + struct ublk_queue *q = &dev->q[q_id]; 783 + unsigned cmd_op = user_data_to_op(cqe->user_data); 784 + 785 + if (cqe->res < 0 && cqe->res != -ENODEV) 786 + ublk_err("%s: res %d userdata %llx queue state %x\n", __func__, 787 + cqe->res, cqe->user_data, q->flags); 788 + 789 + ublk_dbg(UBLK_DBG_IO_CMD, "%s: res %d (qid %d tag %u cmd_op %u target %d/%d) stopping %d\n", 790 + __func__, cqe->res, q->q_id, user_data_to_tag(cqe->user_data), 791 + cmd_op, is_target_io(cqe->user_data), 792 + user_data_to_tgt_data(cqe->user_data), 793 + (t->state & UBLKS_T_STOPPING)); 794 + 795 + /* Don't retrieve io in case of target io */ 796 + if (is_target_io(cqe->user_data)) { 797 + ublksrv_handle_tgt_cqe(t, q, cqe); 798 + return; 799 + } 800 + 801 + t->cmd_inflight--; 802 + 803 + ublk_handle_uring_cmd(t, q, cqe); 753 804 } 754 805 755 806 static int ublk_reap_events_uring(struct ublk_thread *t)