Message ID | 1539941093-32058-1-git-send-email-jianchao.w.wang@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: don't check position contiguity for DISCARD in attempt_merge | expand |
On Fri, Oct 19, 2018 at 5:23 PM Jianchao Wang <jianchao.w.wang@oracle.com> 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@oracle.com> > --- > 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@redhat.com> Thanks, Ming Lei
Jianchao, > 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. Discards need to be contiguous unless queue->limits.max_discard_segments is bigger than 1. So if you remove this I think you need to add a contiguity check in req_attempt_discard_merge().
Hi Martin On 10/19/18 11:57 PM, Martin K. Petersen wrote: > > Jianchao, > >> 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. > > Discards need to be contiguous unless queue->limits.max_discard_segments > is bigger than 1. So if you remove this I think you need to add a > contiguity check in req_attempt_discard_merge(). > Yes. I will send the V2 version next. Thanks Jianchao
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)
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@oracle.com> --- block/blk-merge.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)