On Fri, Oct 19, 2018 at 5:23 PM Jianchao Wang <jianchao.w.wang@xxxxxxxxxx> wrote: > > Discard command supports multiple ranges of blocks, so needn't > checking position contiguity when merging. Let's do the same thing > in attempt_merge as the blk_try_merge. > > Signed-off-by: Jianchao Wang <jianchao.w.wang@xxxxxxxxxx> > --- > block/blk-merge.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/block/blk-merge.c b/block/blk-merge.c > index 42a4674..c94749b 100644 > --- a/block/blk-merge.c > +++ b/block/blk-merge.c > @@ -732,9 +732,10 @@ static struct request *attempt_merge(struct request_queue *q, > return NULL; > > /* > - * not contiguous > + * not contiguous, except for DISCARD > */ > - if (blk_rq_pos(req) + blk_rq_sectors(req) != blk_rq_pos(next)) > + if ((req_op(req) != REQ_OP_DISCARD) && > + (blk_rq_pos(req) + blk_rq_sectors(req) != blk_rq_pos(next))) > return NULL; > > if (rq_data_dir(req) != rq_data_dir(next) > -- > 2.7.4 > Reviewed-by: Ming Lei <ming.lei@xxxxxxxxxx> Thanks, Ming Lei