ublk_queue
static inline bool ublk_need_req_ref(const struct ublk_queue *ubq)
static inline void ublk_init_req_ref(const struct ublk_queue *ubq,
static inline bool ublk_need_get_data(const struct ublk_queue *ubq)
static inline struct ublk_queue *ublk_get_queue(struct ublk_device *dev,
static inline bool ublk_nosrv_should_queue_io(struct ublk_queue *ubq)
struct ublk_queue *ubq;
static unsigned int ublk_map_io(const struct ublk_queue *ubq,
static blk_status_t ublk_setup_iod(struct ublk_queue *ubq, struct request *req)
static inline void __ublk_abort_rq(struct ublk_queue *ubq,
ublk_auto_buf_reg_fallback(const struct ublk_queue *ubq, unsigned tag)
static void ublk_auto_buf_io_setup(const struct ublk_queue *ubq,
ublk_auto_buf_register(const struct ublk_queue *ubq, struct request *req,
static void ublk_auto_buf_dispatch(const struct ublk_queue *ubq,
static bool ublk_start_io(const struct ublk_queue *ubq, struct request *req,
static void ublk_dispatch_req(struct ublk_queue *ubq, struct request *req)
static bool __ublk_batch_prep_dispatch(struct ublk_queue *ubq,
static bool ublk_batch_prep_dispatch(struct ublk_queue *ubq,
static noinline void ublk_batch_dispatch_fail(struct ublk_queue *ubq,
static int __ublk_batch_dispatch(struct ublk_queue *ubq,
struct ublk_queue *ubq)
ublk_batch_dispatch(struct ublk_queue *ubq,
struct ublk_queue *ubq = pdu->ubq;
static void ublk_batch_queue_cmd(struct ublk_queue *ubq, struct request *rq, bool last)
static void ublk_queue_cmd(struct ublk_queue *ubq, struct request *rq)
struct ublk_queue *ubq = rq->mq_hctx->driver_data;
static blk_status_t ublk_prep_req(struct ublk_queue *ubq, struct request *rq,
static inline blk_status_t __ublk_queue_rq_common(struct ublk_queue *ubq,
struct ublk_queue *ubq = hctx->driver_data;
struct ublk_queue *ubq = hctx->driver_data;
struct ublk_queue *ubq = hctx->driver_data;
struct ublk_queue *this_q = req->mq_hctx->driver_data;
static void ublk_batch_queue_cmd_list(struct ublk_queue *ubq, struct rq_list *l)
struct ublk_queue *ubq = NULL;
struct ublk_queue *this_q = req->mq_hctx->driver_data;
struct ublk_queue *ubq = ublk_get_queue(ub, hctx->queue_num);
static void ublk_queue_reinit(struct ublk_device *ub, struct ublk_queue *ubq)
struct ublk_queue *ubq = ublk_get_queue(ub, i);
struct ublk_queue *ubq)
static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ubq)
static void ublk_cancel_cmd(struct ublk_queue *ubq, unsigned tag,
static void ublk_batch_cancel_cmd(struct ublk_queue *ubq,
static void ublk_batch_cancel_queue(struct ublk_queue *ubq)
struct ublk_queue *ubq = pdu->ubq;
struct ublk_queue *ubq = pdu->ubq;
static inline bool ublk_queue_ready(const struct ublk_queue *ubq)
static void ublk_cancel_queue(struct ublk_queue *ubq)
static void ublk_reset_io_flags(struct ublk_queue *ubq, struct ublk_io *io)
static void ublk_queue_reset_io_flags(struct ublk_queue *ubq)
struct ublk_queue *ubq = ublk_get_queue(ub, q_id);
struct ublk_queue *ubq, unsigned int tag)
struct ublk_queue *ubq = rq->mq_hctx->driver_data;
static bool ublk_get_data(const struct ublk_queue *ubq, struct ublk_io *io,
struct ublk_queue *ubq;
struct ublk_queue *queues[];
__ublk_walk_cmd_buf(struct ublk_queue *ubq,
int (*cb)(struct ublk_queue *q,
static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ubq);
int (*cb)(struct ublk_queue *q,
struct ublk_queue *ubq = ublk_get_queue(data->ub, data->header.q_id);
static int ublk_batch_unprep_io(struct ublk_queue *ubq,
static void ublk_batch_dispatch(struct ublk_queue *ubq,
static int ublk_batch_prep_io(struct ublk_queue *ubq,
static int ublk_batch_commit_io_check(const struct ublk_queue *ubq,
static int ublk_batch_commit_io(struct ublk_queue *ubq,
static inline bool ublk_support_batch_io(const struct ublk_queue *ubq)
static int ublk_batch_attach(struct ublk_queue *ubq,
struct ublk_queue *ubq = ublk_get_queue(data->ub, data->header.q_id);
static inline int ublk_io_evts_init(struct ublk_queue *q, unsigned int size,
struct ublk_queue *ubq;
static inline bool ublk_io_evts_empty(const struct ublk_queue *q)
struct ublk_queue *ubq;
static inline void ublk_io_evts_deinit(struct ublk_queue *q)
ublk_get_iod(const struct ublk_queue *ubq, unsigned tag)
static void __ublk_deinit_queue(struct ublk_device *ub, struct ublk_queue *ubq)
static inline bool ublk_support_zero_copy(const struct ublk_queue *ubq)
struct ublk_queue *ubq = ub->queues[q_id];
struct ublk_queue *ubq;
static inline bool ublk_support_shmem_zc(const struct ublk_queue *ubq)
static inline bool ublk_iod_is_shmem_zc(const struct ublk_queue *ubq,
static inline bool ublk_support_auto_buf_reg(const struct ublk_queue *ubq)
static inline bool ublk_support_user_copy(const struct ublk_queue *ubq)
static inline bool ublk_queue_is_zoned(const struct ublk_queue *ubq)
const struct ublk_queue *ubq;
static bool ubq_has_idle_io(const struct ublk_queue *ubq)
struct ublk_queue *ubq = ublk_get_queue(ub, i);
static blk_status_t ublk_setup_iod_zoned(struct ublk_queue *ubq,
static blk_status_t ublk_setup_iod_zoned(struct ublk_queue *ubq,
static void __ublk_release_fcmd(struct ublk_queue *ubq)
static void ublk_batch_deinit_fetch_buf(struct ublk_queue *ubq,
static inline bool ublk_need_map_io(const struct ublk_queue *ubq)
struct ublk_queue *q = &t->dev->q[0];
struct ublk_queue *q,
struct ublk_queue *q = &t->dev->q[i];
struct ublk_queue *q,
static int __ublk_batch_queue_prep_io_cmds(struct ublk_thread *t, struct ublk_queue *q)
int ublk_batch_queue_prep_io_cmds(struct ublk_thread *t, struct ublk_queue *q)
struct ublk_queue *q;
void ublk_batch_complete_io(struct ublk_thread *t, struct ublk_queue *q,
struct ublk_queue *q,
struct ublk_queue *q, int tag,
struct ublk_queue *q, int tag)
static int loop_queue_tgt_io(struct ublk_thread *t, struct ublk_queue *q, int tag)
static int ublk_loop_queue_io(struct ublk_thread *t, struct ublk_queue *q,
static int loop_queue_flush_io(struct ublk_thread *t, struct ublk_queue *q,
static void ublk_loop_io_done(struct ublk_thread *t, struct ublk_queue *q,
static int loop_queue_shmem_zc_io(struct ublk_thread *t, struct ublk_queue *q,
static int loop_queue_tgt_rw_io(struct ublk_thread *t, struct ublk_queue *q,
static int ublk_queue_cmd_buf_sz(struct ublk_queue *q)
static void ublk_queue_deinit(struct ublk_queue *q)
static int ublk_queue_init(struct ublk_queue *q, unsigned long long extra_flags,
const struct ublk_queue *q,
const struct ublk_queue *q = ublk_io_to_queue(io);
struct ublk_queue *q = ublk_io_to_queue(io);
struct ublk_queue *q;
struct ublk_queue *q = &t->dev->q[t->idx];
struct ublk_queue *q,
struct ublk_queue *q,
struct ublk_queue *q = &t->dev->q[i];
void (*pre_fetch_io)(struct ublk_thread *t, struct ublk_queue *q,
int (*queue_io)(struct ublk_thread *, struct ublk_queue *, int tag);
void (*tgt_io_done)(struct ublk_thread *, struct ublk_queue *,
const struct ublk_queue *, int tag);
struct ublk_queue q[UBLK_MAX_QUEUES];
static inline int ublk_queue_batch_io(const struct ublk_queue *q)
static inline size_t ublk_integrity_len(const struct ublk_queue *q, size_t len)
ublk_integrity_data_len(const struct ublk_queue *q, size_t integrity_len)
static inline struct ublk_queue *ublk_io_to_queue(const struct ublk_io *io)
return container_of(io, struct ublk_queue, ios[io->tag]);
static inline int ublk_get_registered_fd(struct ublk_queue *q, int fd_index)
struct ublk_queue *q, int tag, int q_id, __u64 index)
struct ublk_queue *q, int tag, int q_id, __u64 index)
struct ublk_queue *q, int tag, int q_id, __u64 index)
static inline void ublk_set_io_res(struct ublk_queue *q, int tag, int res)
static inline int ublk_get_io_res(const struct ublk_queue *q, unsigned tag)
static inline const struct ublksrv_io_desc *ublk_get_iod(const struct ublk_queue *q, int tag)
const struct ublk_thread *t, const struct ublk_queue *q,
const struct ublk_queue *q,
static inline struct ublk_io *ublk_get_io(struct ublk_queue *q, unsigned tag)
struct ublk_queue *q, unsigned tag)
static inline bool ublk_queue_use_zc(const struct ublk_queue *q)
static inline bool ublk_queue_use_auto_zc(const struct ublk_queue *q)
static inline bool ublk_queue_auto_zc_fallback(const struct ublk_queue *q)
struct ublk_queue;
static inline bool ublk_queue_use_user_copy(const struct ublk_queue *q)
static inline int ublk_queue_no_buf(const struct ublk_queue *q)
const struct ublk_queue *q)
const struct ublk_thread *t, const struct ublk_queue *q,
int ublk_batch_queue_prep_io_cmds(struct ublk_thread *t, struct ublk_queue *q);
void ublk_batch_complete_io(struct ublk_thread *t, struct ublk_queue *q,
static inline int ublk_complete_io(struct ublk_thread *t, struct ublk_queue *q,
static inline void ublk_queued_tgt_io(struct ublk_thread *t, struct ublk_queue *q,
static int ublk_null_queue_io(struct ublk_thread *t, struct ublk_queue *q,
const struct ublk_queue *q, int tag)
static int null_queue_zc_io(struct ublk_thread *t, struct ublk_queue *q,
static int null_queue_auto_zc_io(struct ublk_thread *t, struct ublk_queue *q,
static void ublk_null_io_done(struct ublk_thread *t, struct ublk_queue *q,
static int stripe_queue_tgt_rw_io(struct ublk_thread *t, struct ublk_queue *q,
static int handle_flush(struct ublk_thread *t, struct ublk_queue *q,
static int stripe_queue_tgt_io(struct ublk_thread *t, struct ublk_queue *q,
static int ublk_stripe_queue_io(struct ublk_thread *t, struct ublk_queue *q,
static void ublk_stripe_io_done(struct ublk_thread *t, struct ublk_queue *q,
static inline const struct stripe_conf *get_chunk_shift(const struct ublk_queue *q)