All requests allocated from a request_queue with this callback set can failover their requests during completion. This callback is expected to use the blk_steal_bios() interface to transfer a request's bios back to an upper-layer bio-based request_queue. This will be used by both NVMe multipath and DM multipath. Without it DM multipath cannot get access to NVMe-specific error handling that NVMe core provides in nvme_complete_rq(). Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx> --- include/linux/blkdev.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 8089ca17db9a..f45f5925e100 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -278,6 +278,7 @@ typedef int (lld_busy_fn) (struct request_queue *q); typedef int (bsg_job_fn) (struct bsg_job *); typedef int (init_rq_fn)(struct request_queue *, struct request *, gfp_t); typedef void (exit_rq_fn)(struct request_queue *, struct request *); +typedef void (failover_rq_fn)(struct request *); enum blk_eh_timer_return { BLK_EH_NOT_HANDLED, @@ -423,6 +424,11 @@ struct request_queue { exit_rq_fn *exit_rq_fn; /* Called from inside blk_get_request() */ void (*initialize_rq_fn)(struct request *rq); + /* + * Callback to failover request's bios back to upper layer + * bio-based request_queue using blk_steal_bios(). + */ + failover_rq_fn *failover_rq_fn; const struct blk_mq_ops *mq_ops; -- 2.15.0