blk_mq_ops
Regular
4.4
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
map_queue_fn *map_queue;
timeout_fn *timeout;
poll_fn *poll;
softirq_done_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
};
4.8
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
map_queue_fn *map_queue;
timeout_fn *timeout;
poll_fn *poll;
softirq_done_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
reinit_request_fn *reinit_request;
};
4.10
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
timeout_fn *timeout;
poll_fn *poll;
softirq_done_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
reinit_request_fn *reinit_request;
map_queues_fn *map_queues;
};
4.13
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
timeout_fn *timeout;
poll_fn *poll;
softirq_done_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
reinit_request_fn *reinit_request;
void (*initialize_rq_fn)(struct request *);
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
4.15
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
softirq_done_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
4.18
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
softirq_done_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
5.0
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
5.3
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
5.4
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
5.8
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
5.11
: ✅struct blk_mq_ops {
blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
void (*commit_rqs)(struct blk_mq_hw_ctx *);
bool (*get_budget)(struct request_queue *);
void (*put_budget)(struct request_queue *);
enum blk_eh_timer_return (*timeout)(struct request *, bool);
int (*poll)(struct blk_mq_hw_ctx *);
void (*complete)(struct request *);
int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
void (*initialize_rq_fn)(struct request *);
void (*cleanup_rq)(struct request *);
bool (*busy)(struct request_queue *);
int (*map_queues)(struct blk_mq_tag_set *);
void (*show_rq)(struct seq_file *, struct request *);
};
5.13
: ✅struct blk_mq_ops {
blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
void (*commit_rqs)(struct blk_mq_hw_ctx *);
int (*get_budget)(struct request_queue *);
void (*put_budget)(struct request_queue *, int);
void (*set_rq_budget_token)(struct request *, int);
int (*get_rq_budget_token)(struct request *);
enum blk_eh_timer_return (*timeout)(struct request *, bool);
int (*poll)(struct blk_mq_hw_ctx *);
void (*complete)(struct request *);
int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
void (*initialize_rq_fn)(struct request *);
void (*cleanup_rq)(struct request *);
bool (*busy)(struct request_queue *);
int (*map_queues)(struct blk_mq_tag_set *);
void (*show_rq)(struct seq_file *, struct request *);
};
5.15
: ✅struct blk_mq_ops {
blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
void (*commit_rqs)(struct blk_mq_hw_ctx *);
int (*get_budget)(struct request_queue *);
void (*put_budget)(struct request_queue *, int);
void (*set_rq_budget_token)(struct request *, int);
int (*get_rq_budget_token)(struct request *);
enum blk_eh_timer_return (*timeout)(struct request *, bool);
int (*poll)(struct blk_mq_hw_ctx *);
void (*complete)(struct request *);
int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
void (*initialize_rq_fn)(struct request *);
void (*cleanup_rq)(struct request *);
bool (*busy)(struct request_queue *);
int (*map_queues)(struct blk_mq_tag_set *);
void (*show_rq)(struct seq_file *, struct request *);
};
5.19
: ✅struct blk_mq_ops {
blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
void (*commit_rqs)(struct blk_mq_hw_ctx *);
void (*queue_rqs)(struct request **);
int (*get_budget)(struct request_queue *);
void (*put_budget)(struct request_queue *, int);
void (*set_rq_budget_token)(struct request *, int);
int (*get_rq_budget_token)(struct request *);
enum blk_eh_timer_return (*timeout)(struct request *, bool);
int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
void (*complete)(struct request *);
int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
void (*cleanup_rq)(struct request *);
bool (*busy)(struct request_queue *);
int (*map_queues)(struct blk_mq_tag_set *);
void (*show_rq)(struct seq_file *, struct request *);
};
6.2
: ✅struct blk_mq_ops {
blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
void (*commit_rqs)(struct blk_mq_hw_ctx *);
void (*queue_rqs)(struct request **);
int (*get_budget)(struct request_queue *);
void (*put_budget)(struct request_queue *, int);
void (*set_rq_budget_token)(struct request *, int);
int (*get_rq_budget_token)(struct request *);
enum blk_eh_timer_return (*timeout)(struct request *);
int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
void (*complete)(struct request *);
int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
void (*cleanup_rq)(struct request *);
bool (*busy)(struct request_queue *);
void (*map_queues)(struct blk_mq_tag_set *);
void (*show_rq)(struct seq_file *, struct request *);
};
6.5
: ✅struct blk_mq_ops {
blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
void (*commit_rqs)(struct blk_mq_hw_ctx *);
void (*queue_rqs)(struct request **);
int (*get_budget)(struct request_queue *);
void (*put_budget)(struct request_queue *, int);
void (*set_rq_budget_token)(struct request *, int);
int (*get_rq_budget_token)(struct request *);
enum blk_eh_timer_return (*timeout)(struct request *);
int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
void (*complete)(struct request *);
int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
void (*cleanup_rq)(struct request *);
bool (*busy)(struct request_queue *);
void (*map_queues)(struct blk_mq_tag_set *);
void (*show_rq)(struct seq_file *, struct request *);
};
6.8
: ✅struct blk_mq_ops {
blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);
void (*commit_rqs)(struct blk_mq_hw_ctx *);
void (*queue_rqs)(struct request **);
int (*get_budget)(struct request_queue *);
void (*put_budget)(struct request_queue *, int);
void (*set_rq_budget_token)(struct request *, int);
int (*get_rq_budget_token)(struct request *);
enum blk_eh_timer_return (*timeout)(struct request *);
int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *);
void (*complete)(struct request *);
int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);
void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);
int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);
void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);
void (*cleanup_rq)(struct request *);
bool (*busy)(struct request_queue *);
void (*map_queues)(struct blk_mq_tag_set *);
void (*show_rq)(struct seq_file *, struct request *);
};
arm64
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
armhf
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
ppc64el
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
riscv64
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
aws
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
azure
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
gcp
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
lowlatency
: ✅struct blk_mq_ops {
queue_rq_fn *queue_rq;
commit_rqs_fn *commit_rqs;
get_budget_fn *get_budget;
put_budget_fn *put_budget;
timeout_fn *timeout;
poll_fn *poll;
complete_fn *complete;
init_hctx_fn *init_hctx;
exit_hctx_fn *exit_hctx;
init_request_fn *init_request;
exit_request_fn *exit_request;
void (*initialize_rq_fn)(struct request *);
cleanup_rq_fn *cleanup_rq;
busy_fn *busy;
map_queues_fn *map_queues;
void (*show_rq)(struct seq_file *, struct request *);
};
Regular
4.4
and 4.8
⚠️reinit_request_fn *reinit_request
4.8
and 4.10
⚠️map_queues_fn *map_queues
map_queue_fn *map_queue
4.10
and 4.13
⚠️void (*initialize_rq_fn)(struct request *)
void (*show_rq)(struct seq_file *, struct request *)
4.13
and 4.15
⚠️get_budget_fn *get_budget
put_budget_fn *put_budget
reinit_request_fn *reinit_request
4.15
and 4.18
✅
4.18
and 5.0
⚠️commit_rqs_fn *commit_rqs
busy_fn *busy
softirq_done_fn *complete
➡️ complete_fn *complete
5.0
and 5.3
✅
5.3
and 5.4
⚠️cleanup_rq_fn *cleanup_rq
5.4
and 5.8
✅
5.8
and 5.11
⚠️queue_rq_fn *queue_rq
➡️ blk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *)
commit_rqs_fn *commit_rqs
➡️ void (*commit_rqs)(struct blk_mq_hw_ctx *)
get_budget_fn *get_budget
➡️ bool (*get_budget)(struct request_queue *)
put_budget_fn *put_budget
➡️ void (*put_budget)(struct request_queue *)
timeout_fn *timeout
➡️ enum blk_eh_timer_return (*timeout)(struct request *, bool)
poll_fn *poll
➡️ int (*poll)(struct blk_mq_hw_ctx *)
complete_fn *complete
➡️ void (*complete)(struct request *)
init_hctx_fn *init_hctx
➡️ int (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int)
exit_hctx_fn *exit_hctx
➡️ void (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int)
init_request_fn *init_request
➡️ int (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int)
exit_request_fn *exit_request
➡️ void (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int)
cleanup_rq_fn *cleanup_rq
➡️ void (*cleanup_rq)(struct request *)
busy_fn *busy
➡️ bool (*busy)(struct request_queue *)
map_queues_fn *map_queues
➡️ int (*map_queues)(struct blk_mq_tag_set *)
5.11
and 5.13
⚠️void (*set_rq_budget_token)(struct request *, int)
int (*get_rq_budget_token)(struct request *)
bool (*get_budget)(struct request_queue *)
➡️ int (*get_budget)(struct request_queue *)
void (*put_budget)(struct request_queue *)
➡️ void (*put_budget)(struct request_queue *, int)
5.13
and 5.15
✅
5.15
and 5.19
⚠️void (*queue_rqs)(struct request **)
void (*initialize_rq_fn)(struct request *)
int (*poll)(struct blk_mq_hw_ctx *)
➡️ int (*poll)(struct blk_mq_hw_ctx *, struct io_comp_batch *)
5.19
and 6.2
⚠️enum blk_eh_timer_return (*timeout)(struct request *, bool)
➡️ enum blk_eh_timer_return (*timeout)(struct request *)
int (*map_queues)(struct blk_mq_tag_set *)
➡️ void (*map_queues)(struct blk_mq_tag_set *)
6.2
and 6.5
✅
6.5
and 6.8
✅
amd64
and arm64
✅
amd64
and armhf
✅
amd64
and ppc64el
✅
amd64
and riscv64
✅
generic
and aws
✅
generic
and azure
✅
generic
and gcp
✅
generic
and lowlatency
✅