On 3/22/19 7:13 AM, Johannes Thumshirn wrote:
> @@ -712,7 +714,10 @@ int bio_add_pc_page(struct request_queue *q, struct bio
> *bio, struct page
> bvec->bv_len = len;
> bvec->bv_offset = offset;
> bio->bi_vcnt++;
> - bio->bi_phys_segments++;
> + if (bio->bi_phys_segments == -1)
> + bio->bi_phys_segments = 1;
> + else
> + bio->bi_phys_segments++;
> bio->bi_iter.bi_size += len;
Echo Christophs suggestion here.
> diff --git a/block/blk-core.c b/block/blk-core.c
> index 4673ebe42255..53372a16dd7c 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -1514,6 +1514,7 @@ void blk_rq_bio_prep(struct request_queue *q, struct
> request *rq,
> else if (bio_op(bio) == REQ_OP_DISCARD)
> rq->nr_phys_segments = 1;
>
> + WARN_ON(rq->nr_phys_segments == -1);
> rq->__data_len = bio->bi_iter.bi_size;
> rq->bio = rq->biotail = bio;
Just make that:
else
rq->nr_phys_segments = 0;
for the third case?
--
Jens Axboe