}
 }
 
-static void ublk_handle_need_get_data(struct ublk_device *ub, int q_id,
-               int tag)
-{
-       struct ublk_queue *ubq = ublk_get_queue(ub, q_id);
-       struct request *req = blk_mq_tag_to_rq(ub->tag_set.tags[q_id], tag);
-
-       ublk_queue_cmd(ubq, req);
-}
-
 static inline int ublk_check_cmd_op(u32 cmd_op)
 {
        u32 ioc_type = _IOC_TYPE(cmd_op);
                if (!(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV))
                        goto out;
                ublk_fill_io_cmd(io, cmd, ub_cmd->addr);
-               ublk_handle_need_get_data(ub, ub_cmd->q_id, ub_cmd->tag);
-               break;
+               req = blk_mq_tag_to_rq(ub->tag_set.tags[ub_cmd->q_id], tag);
+               ublk_dispatch_req(ubq, req, issue_flags);
+               return -EIOCBQUEUED;
        default:
                goto out;
        }