From: Ming Lei <ming.lei@redhat.com>
To: Christoph Hellwig <hch@lst.de>
Cc: axboe@fb.com, linux-block@vger.kernel.org,
Hannes Reinecke <hare@suse.com>
Subject: Re: [PATCH 4/4] block: remove the bi_seg_{front,back}_size fields in struct bio
Date: Tue, 21 May 2019 16:06:04 +0800 [thread overview]
Message-ID: <20190521080603.GC27095@ming.t460p> (raw)
In-Reply-To: <20190521070143.22631-5-hch@lst.de>
On Tue, May 21, 2019 at 09:01:43AM +0200, Christoph Hellwig wrote:
> At this point these fields aren't used for anything, so we can remove
> them.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> Reviewed-by: Hannes Reinecke <hare@suse.com>
> ---
> block/blk-merge.c | 94 +++++----------------------------------
> include/linux/blk_types.h | 7 ---
> 2 files changed, 12 insertions(+), 89 deletions(-)
>
> diff --git a/block/blk-merge.c b/block/blk-merge.c
> index eee2c02c50ce..17713d7d98d5 100644
> --- a/block/blk-merge.c
> +++ b/block/blk-merge.c
> @@ -162,8 +162,7 @@ static unsigned get_max_segment_size(struct request_queue *q,
> * variables.
> */
> static bool bvec_split_segs(struct request_queue *q, struct bio_vec *bv,
> - unsigned *nsegs, unsigned *last_seg_size,
> - unsigned *front_seg_size, unsigned *sectors, unsigned max_segs)
> + unsigned *nsegs, unsigned *sectors, unsigned max_segs)
> {
> unsigned len = bv->bv_len;
> unsigned total_len = 0;
> @@ -185,28 +184,12 @@ static bool bvec_split_segs(struct request_queue *q, struct bio_vec *bv,
> break;
> }
>
> - if (!new_nsegs)
> - return !!len;
> -
> - /* update front segment size */
> - if (!*nsegs) {
> - unsigned first_seg_size;
> -
> - if (new_nsegs == 1)
> - first_seg_size = get_max_segment_size(q, bv->bv_offset);
> - else
> - first_seg_size = queue_max_segment_size(q);
> -
> - if (*front_seg_size < first_seg_size)
> - *front_seg_size = first_seg_size;
> + if (new_nsegs) {
> + *nsegs += new_nsegs;
> + if (sectors)
> + *sectors += total_len >> 9;
> }
>
> - /* update other varibles */
> - *last_seg_size = seg_size;
> - *nsegs += new_nsegs;
> - if (sectors)
> - *sectors += total_len >> 9;
> -
> /* split in the middle of the bvec if len != 0 */
> return !!len;
> }
> @@ -218,8 +201,7 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
> {
> struct bio_vec bv, bvprv, *bvprvp = NULL;
> struct bvec_iter iter;
> - unsigned seg_size = 0, nsegs = 0, sectors = 0;
> - unsigned front_seg_size = bio->bi_seg_front_size;
> + unsigned nsegs = 0, sectors = 0;
> bool do_split = true;
> struct bio *new = NULL;
> const unsigned max_sectors = get_max_io_size(q, bio);
> @@ -243,8 +225,6 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
> /* split in the middle of bvec */
> bv.bv_len = (max_sectors - sectors) << 9;
> bvec_split_segs(q, &bv, &nsegs,
> - &seg_size,
> - &front_seg_size,
> §ors, max_segs);
> }
> goto split;
> @@ -258,12 +238,9 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
>
> if (bv.bv_offset + bv.bv_len <= PAGE_SIZE) {
> nsegs++;
> - seg_size = bv.bv_len;
> sectors += bv.bv_len >> 9;
> - if (nsegs == 1 && seg_size > front_seg_size)
> - front_seg_size = seg_size;
> - } else if (bvec_split_segs(q, &bv, &nsegs, &seg_size,
> - &front_seg_size, §ors, max_segs)) {
> + } else if (bvec_split_segs(q, &bv, &nsegs, §ors,
> + max_segs)) {
> goto split;
> }
> }
> @@ -278,10 +255,6 @@ static struct bio *blk_bio_segment_split(struct request_queue *q,
> bio = new;
> }
>
> - bio->bi_seg_front_size = front_seg_size;
> - if (seg_size > bio->bi_seg_back_size)
> - bio->bi_seg_back_size = seg_size;
> -
> return do_split ? new : NULL;
> }
>
> @@ -336,17 +309,13 @@ EXPORT_SYMBOL(blk_queue_split);
> static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
> struct bio *bio)
> {
> - struct bio_vec uninitialized_var(bv), bvprv = { NULL };
> - unsigned int seg_size, nr_phys_segs;
> - unsigned front_seg_size;
> - struct bio *fbio, *bbio;
> + unsigned int nr_phys_segs = 0;
> struct bvec_iter iter;
> + struct bio_vec bv;
>
> if (!bio)
> return 0;
>
> - front_seg_size = bio->bi_seg_front_size;
> -
> switch (bio_op(bio)) {
> case REQ_OP_DISCARD:
> case REQ_OP_SECURE_ERASE:
> @@ -356,23 +325,11 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
> return 1;
> }
>
> - fbio = bio;
> - seg_size = 0;
> - nr_phys_segs = 0;
> for_each_bio(bio) {
> - bio_for_each_bvec(bv, bio, iter) {
> - bvec_split_segs(q, &bv, &nr_phys_segs, &seg_size,
> - &front_seg_size, NULL, UINT_MAX);
> - }
> - bbio = bio;
> - if (likely(bio->bi_iter.bi_size))
> - bvprv = bv;
> + bio_for_each_bvec(bv, bio, iter)
> + bvec_split_segs(q, &bv, &nr_phys_segs, NULL, UINT_MAX);
> }
>
> - fbio->bi_seg_front_size = front_seg_size;
> - if (seg_size > bbio->bi_seg_back_size)
> - bbio->bi_seg_back_size = seg_size;
> -
> return nr_phys_segs;
> }
>
> @@ -392,24 +349,6 @@ void blk_recount_segments(struct request_queue *q, struct bio *bio)
> bio_set_flag(bio, BIO_SEG_VALID);
> }
>
> -static int blk_phys_contig_segment(struct request_queue *q, struct bio *bio,
> - struct bio *nxt)
> -{
> - struct bio_vec end_bv = { NULL }, nxt_bv;
> -
> - if (bio->bi_seg_back_size + nxt->bi_seg_front_size >
> - queue_max_segment_size(q))
> - return 0;
> -
> - if (!bio_has_data(bio))
> - return 1;
> -
> - bio_get_last_bvec(bio, &end_bv);
> - bio_get_first_bvec(nxt, &nxt_bv);
> -
> - return biovec_phys_mergeable(q, &end_bv, &nxt_bv);
> -}
> -
> static inline struct scatterlist *blk_next_sg(struct scatterlist **sg,
> struct scatterlist *sglist)
> {
> @@ -669,8 +608,6 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
> struct request *next)
> {
> int total_phys_segments;
> - unsigned int seg_size =
> - req->biotail->bi_seg_back_size + next->bio->bi_seg_front_size;
>
> if (req_gap_back_merge(req, next->bio))
> return 0;
> @@ -683,13 +620,6 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
> return 0;
>
> total_phys_segments = req->nr_phys_segments + next->nr_phys_segments;
> - if (blk_phys_contig_segment(q, req->biotail, next->bio)) {
> - if (req->nr_phys_segments == 1)
> - req->bio->bi_seg_front_size = seg_size;
> - if (next->nr_phys_segments == 1)
> - next->biotail->bi_seg_back_size = seg_size;
> - }
> -
> if (total_phys_segments > queue_max_segments(q))
> return 0;
>
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index be418275763c..95202f80676c 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -159,13 +159,6 @@ struct bio {
> */
> unsigned int bi_phys_segments;
>
> - /*
> - * To keep track of the max segment size, we account for the
> - * sizes of the first and last mergeable segments in this bio.
> - */
> - unsigned int bi_seg_front_size;
> - unsigned int bi_seg_back_size;
> -
> struct bvec_iter bi_iter;
>
> atomic_t __bi_remaining;
> --
> 2.20.1
>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Thanks,
Ming
next prev parent reply other threads:[~2019-05-21 8:06 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-21 7:01 fix nr_phys_segments vs iterators accounting v3 Christoph Hellwig
2019-05-21 7:01 ` [PATCH 1/4] block: don't decrement nr_phys_segments for physically contigous segments Christoph Hellwig
2019-05-21 8:05 ` Ming Lei
2019-05-21 7:01 ` [PATCH 2/4] block: force an unlimited segment size on queues with a virt boundary Christoph Hellwig
2019-07-23 15:48 ` James Bottomley
2019-07-23 16:11 ` Christoph Hellwig
2019-05-21 7:01 ` [PATCH 3/4] block: remove the segment size check in bio_will_gap Christoph Hellwig
2019-05-21 7:01 ` [PATCH 4/4] block: remove the bi_seg_{front,back}_size fields in struct bio Christoph Hellwig
2019-05-21 8:06 ` Ming Lei [this message]
2019-05-21 12:47 ` fix nr_phys_segments vs iterators accounting v3 Jens Axboe
-- strict thread matches above, loose matches on Subject: below --
2019-05-16 8:40 fix nr_phys_segments vs iterators accounting v2 Christoph Hellwig
2019-05-16 8:40 ` [PATCH 4/4] block: remove the bi_seg_{front,back}_size fields in struct bio Christoph Hellwig
2019-05-16 8:50 ` Hannes Reinecke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190521080603.GC27095@ming.t460p \
--to=ming.lei@redhat.com \
--cc=axboe@fb.com \
--cc=hare@suse.com \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.