On Thu, 28 Jun 2018 09:27:08 +0200
Johannes Thumshirn <jthumsh...@suse.de> wrote:

> Hi Ming,
> 
> On Thu, Jun 28, 2018 at 11:19:16AM +0800, Ming Lei wrote:
> > +   list_for_each_entry(rq, list, queuelist) {
> >             BUG_ON(rq->mq_ctx != ctx);
> > -           list_del_init(&rq->queuelist);
> > -           __blk_mq_insert_req_list(hctx, rq, false);
> > +           trace_block_rq_insert(hctx->queue, rq);
> >     }  
> 
> I wonder if we really need the above loop unconditionally. It does
> some BUG_ON() sanity checking (which I hate but it was already there
> so not your problem) and tracing of the request insertion.
> 
> So can we maybe only run this loop if tracing is enabled? Not sure if
> this is possible though. Maybe Steven (Cced) can help here.

Yes:

        if (trace_block_rq_insert_enabled()) {
                list_for_each_entry(rq, list, queuelist) {
                        BUG_ON(rq->mq_ctx != ctx);
                        list_del_init(&rq->queuelist);
                        __blk_mq_insert_req_list(hctx, rq, false);
                        trace_block_rq_insert(hctx->queue, rq);
                }
        }

This will only call the loop if the trace event "block_rq_insert" has
been activated. It also uses the jump label infrastructure, so that if
statement is a non-conditional branch (static_key_false()).

-- Steve

Reply via email to