From: Christoph Hellwig <hch@lst.de>
To: axboe@fb.com
Cc: ming.lei@redhat.com, Matias Bjorling <mb@lightnvm.io>,
linux-block@vger.kernel.org
Subject: [PATCH 04/10] block: remove the bi_seg_{front,back}_size fields in struct bio
Date: Mon, 13 May 2019 08:37:48 +0200 [thread overview]
Message-ID: <20190513063754.1520-5-hch@lst.de> (raw)
In-Reply-To: <20190513063754.1520-1-hch@lst.de>
At this point these fields aren't used for anything, so we can remove
them.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
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
next prev parent reply other threads:[~2019-05-13 6:38 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-13 6:37 fix nr_phys_segments vs iterators accounting Christoph Hellwig
2019-05-13 6:37 ` [PATCH 01/10] block: don't decrement nr_phys_segments for physically contigous segments Christoph Hellwig
2019-05-13 9:45 ` Ming Lei
2019-05-13 12:03 ` Christoph Hellwig
2019-05-13 12:37 ` Christoph Hellwig
2019-05-14 4:36 ` Ming Lei
2019-05-14 5:14 ` Christoph Hellwig
2019-05-14 9:05 ` Ming Lei
2019-05-14 13:51 ` Christoph Hellwig
2019-05-14 13:57 ` Hannes Reinecke
2019-05-14 14:27 ` Ming Lei
2019-05-14 14:31 ` Christoph Hellwig
2019-05-14 14:32 ` Christoph Hellwig
2019-05-13 6:37 ` [PATCH 02/10] block: force an unlimited segment size on queues with a virt boundary Christoph Hellwig
2019-05-15 8:19 ` Ming Lei
2019-05-13 6:37 ` [PATCH 03/10] block: remove the segment size check in bio_will_gap Christoph Hellwig
2019-05-15 8:34 ` Ming Lei
2019-05-13 6:37 ` Christoph Hellwig [this message]
2019-05-13 6:37 ` [PATCH 05/10] block: initialize the write priority in blk_rq_bio_prep Christoph Hellwig
2019-05-13 15:04 ` Chaitanya Kulkarni
2019-05-13 6:37 ` [PATCH 06/10] block: remove blk_init_request_from_bio Christoph Hellwig
2019-05-13 6:37 ` [PATCH 07/10] block: remove the bi_phys_segments field in struct bio Christoph Hellwig
2019-05-13 6:37 ` [PATCH 08/10] block: simplify blk_recalc_rq_segments Christoph Hellwig
2019-05-13 6:37 ` [PATCH 09/10] block: untangle the end of blk_bio_segment_split Christoph Hellwig
2019-05-13 6:37 ` [PATCH 10/10] block: mark blk_rq_bio_prep as inline Christoph Hellwig
2019-05-13 14:57 ` Chaitanya Kulkarni
[not found] ` <CGME20190513063855epcas5p33ef8c4c0a0055bd0b66eadc859796f0f@epcms2p6>
2019-05-13 7:34 ` [PATCH 05/10] block: initialize the write priority in blk_rq_bio_prep Minwoo Im
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=20190513063754.1520-5-hch@lst.de \
--to=hch@lst.de \
--cc=axboe@fb.com \
--cc=linux-block@vger.kernel.org \
--cc=mb@lightnvm.io \
--cc=ming.lei@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).