On Thu, 2019-04-04 at 15:08 +0800, Ming Lei wrote:
> On Wed, Apr 03, 2019 at 01:11:26PM -0700, Bart Van Assche wrote:
> > If blk_mq_try_issue_directly() returns BLK_STS*_RESOURCE that means that
> > the request has not been queued and that the caller should retry to submit
> > the request. Both blk_mq_request_bypass_insert() and
> > blk_mq_sched_insert_request() guarantee that a request will be processed.
> > Hence return BLK_STS_OK if one of these functions is called. This patch
> > avoids that blk_mq_dispatch_rq_list() crashes when using dm-mpath.
> > 
> > Cc: Christoph Hellwig <[email protected]>
> > Cc: Hannes Reinecke <[email protected]>
> > Cc: James Smart <[email protected]>
> > Cc: Ming Lei <[email protected]>
> > Cc: Jianchao Wang <[email protected]>
> > Cc: Keith Busch <[email protected]>
> > Cc: Dongli Zhang <[email protected]>
> > Cc: Laurence Oberman <[email protected]>
> > Tested-by: Laurence Oberman <[email protected]>
> > Reviewed-by: Laurence Oberman <[email protected]>
> > Reported-by: Laurence Oberman <[email protected]>
> > Fixes: 7f556a44e61d ("blk-mq: refactor the code of issue request directly") 
> > # v5.0.
> > Cc: <[email protected]>
> > Signed-off-by: Bart Van Assche <[email protected]>
> > ---
> >  block/blk-mq.c | 9 ++-------
> >  1 file changed, 2 insertions(+), 7 deletions(-)
> > 
> > diff --git a/block/blk-mq.c b/block/blk-mq.c
> > index 652d0c6d5945..b2c20dce8a30 100644
> > --- a/block/blk-mq.c
> > +++ b/block/blk-mq.c
> > @@ -1859,16 +1859,11 @@ blk_status_t blk_mq_try_issue_directly(struct 
> > blk_mq_hw_ctx *hctx,
> >     case BLK_STS_RESOURCE:
> >             if (force) {
> >                     blk_mq_request_bypass_insert(rq, run_queue);
> > -                   /*
> > -                    * We have to return BLK_STS_OK for the DM
> > -                    * to avoid livelock. Otherwise, we return
> > -                    * the real result to indicate whether the
> > -                    * request is direct-issued successfully.
> > -                    */
> > -                   ret = bypass ? BLK_STS_OK : ret;
> > +                   ret = BLK_STS_OK;
> >             } else if (!bypass) {
> >                     blk_mq_sched_insert_request(rq, false,
> >                                                 run_queue, false);
> > +                   ret = BLK_STS_OK;
> >             }
> 
> This change itself is correct.
> 
> However, there is other issue introduced by 7f556a44e61d.
> 
> We need blk_insert_cloned_request() to pass back 
> BLK_STS_RESOURCE/BLK_STS_RESOURCE
> to caller, so that dm-rq driver may see the underlying queue is busy, then 
> tell
> blk-mq to deal with the busy condition from dm-rq queue, so that IO
> merge can get improved.
> 
> That is exactly what 396eaf21ee17c476e8f6 ("blk-mq: improve DM's blk-mq IO 
> merging
> via blk_insert_cloned_request feedback") did.
> 
> There must be performance regression with 7f556a44e61d by cut the feedback.
> 
> So could you fix them all in one patch?

Since commit 7f556a44e61d introduced multiple problems and since fixing
these is nontrivial, how about reverting that commit?

Thanks,

Bart.

Reply via email to