> + > +static int loop_init_hctx(struct blk_mq_hw_ctx *hctx, void *data, > + unsigned int index) > +{ > + struct loop_device *lo = data; > + > + hctx->driver_data = lo; I don't think there is much of a point to store this in the hctx instead of relying on the queue. > +static void loop_softirq_done_fn(struct request *rq) > +{ > + blk_mq_end_io(rq, rq->errors); > +} no need for a noop softirq done function. > +static void loop_queue_work(struct work_struct *work) Offloading work straight to a workqueue dosn't make much sense in the blk-mq model as we'll usually be called from one. If you need to avoid the cases where we are called directly a flag for the blk-mq code to always schedule a workqueue sounds like a much better plan. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html