Re: [PATCH 08/12] dm: dm.c: replace 'bio->bi_vcnt == 1' with !bio_multiple_segments

From: Ming Lei
Date: Mon Nov 14 2016 - 20:03:24 EST


On Fri, Nov 11, 2016 at 8:05 PM, Ming Lei <tom.leiming@xxxxxxxxx> wrote:
> Avoid to access .bi_vcnt directly, because the bio can be
> splitted from block layer, and .bi_vcnt should never have
> been used here.
>
> Signed-off-by: Ming Lei <tom.leiming@xxxxxxxxx>
> ---
> drivers/md/dm-rq.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c
> index b2a9e2d161e4..d9cc8324e597 100644
> --- a/drivers/md/dm-rq.c
> +++ b/drivers/md/dm-rq.c
> @@ -797,8 +797,13 @@ static void dm_old_request_fn(struct request_queue *q)
> if (req_op(rq) != REQ_OP_FLUSH)
> pos = blk_rq_pos(rq);
>
> + /*
> + * bio can be splitted from block layer, so use
> + * !bio_multiple_segments instead of 'bio->bi_vcnt == 1'
> + */
> if ((dm_old_request_peeked_before_merge_deadline(md) &&
> - md_in_flight(md) && rq->bio && rq->bio->bi_vcnt == 1 &&
> + md_in_flight(md) && rq->bio &&
> + !bio_multiple_segments(rq->bio) &&
> md->last_rq_pos == pos && md->last_rq_rw == rq_data_dir(rq)) ||
> (ti->type->busy && ti->type->busy(ti))) {
> blk_delay_queue(q, 10);

Hi Alasdair, Mike, Christoph and anyone,

Could you give this one a review?

Thanks,
Ming Lei