On Sun, 2017-05-28 at 10:34 +0200, hch@xxxxxx wrote: > On Fri, May 26, 2017 at 11:56:30PM +0000, Bart Van Assche wrote: > > I have tried to move that call into blk_mq_alloc_request() but that > > resulted in a kernel oops during boot due to scsi_add_cmd_to_list() > > dereferencing scsi_cmnd.device and due to that pointer being invalid. > > I think that pointer was invalid because moving the initialize_rq_fn() > > call into blk_mq_alloc_request() caused request initialization to be > > skipped for the following code path: > > submit_bio() > > -> generic_make_request() > > -> .make_request_fn == blk_mq_make_request() > > -> blk_mq_sched_get_request() > > -> __blk_mq_alloc_request() > > -> blk_mq_rq_ctx_init() > > > > This is why I would like to keep the .initialize_rq_fn() call in > > blk_mq_rq_ctx_init(). > > But we don't call scsi_req_init for this path either with the current > code. So not having the call should be fine as long as you ensure > we still manually initialize everything for the non-passthrough path > in the later patches. I'll keep an eye on that issue while reviewing > the remaining patches. Hello Christoph, Do you see an alternative to introducing an .initialize_rq_fn() call in blk_rq_init() / blk_mq_rq_ctx_init() to ensure that jiffies_at_alloc is only set once and not every time a request is requeued? Thanks, Bart.