blk_mq_opsRegular
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 ✅