Re: [PATCH 08/19] block: Introduce request_queue.initialize_rq_fn()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux