From: Christoph Hellwig <hch@lst.de>
To: axboe@fb.com
Cc: Matias Bjorling <mb@lightnvm.io>, linux-block@vger.kernel.org
Subject: [PATCH 4/6] block: simplify blk_recalc_rq_segments
Date: Thu, 6 Jun 2019 12:29:02 +0200 [thread overview]
Message-ID: <20190606102904.4024-5-hch@lst.de> (raw)
In-Reply-To: <20190606102904.4024-1-hch@lst.de>
Return the segement and let the callers assign them, which makes the code
a littler more obvious. Also pass the request instead of q plus bio
chain, allowing for the use of rq_for_each_bvec.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
block/blk-core.c | 4 ++--
block/blk-merge.c | 21 ++++++---------------
block/blk.h | 2 +-
3 files changed, 9 insertions(+), 18 deletions(-)
diff --git a/block/blk-core.c b/block/blk-core.c
index 48088dff4ec0..2287b8c2979c 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1139,7 +1139,7 @@ static int blk_cloned_rq_check_limits(struct request_queue *q,
* Recalculate it to check the request correctly on this queue's
* limitation.
*/
- blk_recalc_rq_segments(rq);
+ rq->nr_phys_segments = blk_recalc_rq_segments(rq);
if (rq->nr_phys_segments > queue_max_segments(q)) {
printk(KERN_ERR "%s: over max segments limit. (%hu > %hu)\n",
__func__, rq->nr_phys_segments, queue_max_segments(q));
@@ -1408,7 +1408,7 @@ bool blk_update_request(struct request *req, blk_status_t error,
}
/* recalculate the number of segments */
- blk_recalc_rq_segments(req);
+ req->nr_phys_segments = blk_recalc_rq_segments(req);
}
return true;
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 72b4fd89a22d..2ea21ffd5f72 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -310,17 +310,16 @@ void blk_queue_split(struct request_queue *q, struct bio **bio)
}
EXPORT_SYMBOL(blk_queue_split);
-static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
- struct bio *bio)
+unsigned int blk_recalc_rq_segments(struct request *rq)
{
unsigned int nr_phys_segs = 0;
- struct bvec_iter iter;
+ struct req_iterator iter;
struct bio_vec bv;
- if (!bio)
+ if (!rq->bio)
return 0;
- switch (bio_op(bio)) {
+ switch (bio_op(rq->bio)) {
case REQ_OP_DISCARD:
case REQ_OP_SECURE_ERASE:
case REQ_OP_WRITE_ZEROES:
@@ -329,19 +328,11 @@ static unsigned int __blk_recalc_rq_segments(struct request_queue *q,
return 1;
}
- for_each_bio(bio) {
- bio_for_each_bvec(bv, bio, iter)
- bvec_split_segs(q, &bv, &nr_phys_segs, NULL, UINT_MAX);
- }
-
+ rq_for_each_bvec(bv, rq, iter)
+ bvec_split_segs(rq->q, &bv, &nr_phys_segs, NULL, UINT_MAX);
return nr_phys_segs;
}
-void blk_recalc_rq_segments(struct request *rq)
-{
- rq->nr_phys_segments = __blk_recalc_rq_segments(rq->q, rq->bio);
-}
-
static inline struct scatterlist *blk_next_sg(struct scatterlist **sg,
struct scatterlist *sglist)
{
diff --git a/block/blk.h b/block/blk.h
index 1390e8dbcdae..befdab456209 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -203,7 +203,7 @@ struct request *attempt_back_merge(struct request_queue *q, struct request *rq);
struct request *attempt_front_merge(struct request_queue *q, struct request *rq);
int blk_attempt_req_merge(struct request_queue *q, struct request *rq,
struct request *next);
-void blk_recalc_rq_segments(struct request *rq);
+unsigned int blk_recalc_rq_segments(struct request *rq);
void blk_rq_set_mixed_merge(struct request *rq);
bool blk_rq_merge_ok(struct request *rq, struct bio *bio);
enum elv_merge blk_try_merge(struct request *rq, struct bio *bio);
--
2.20.1
next prev parent reply other threads:[~2019-06-06 10:29 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-06 10:28 remove bi_phys_segments and related cleanups Christoph Hellwig
2019-06-06 10:28 ` [PATCH 1/6] block: initialize the write priority in blk_rq_bio_prep Christoph Hellwig
2019-06-07 5:58 ` Hannes Reinecke
2019-06-07 12:20 ` Minwoo Im
2019-06-20 13:40 ` Minwoo Im
2019-06-06 10:29 ` [PATCH 2/6] block: remove blk_init_request_from_bio Christoph Hellwig
2019-06-07 5:59 ` Hannes Reinecke
2019-06-07 12:23 ` Minwoo Im
2019-06-07 12:57 ` Javier González
2019-06-09 19:51 ` Matias Bjørling
2019-06-06 10:29 ` [PATCH 3/6] block: remove the bi_phys_segments field in struct bio Christoph Hellwig
2019-06-07 6:02 ` Hannes Reinecke
2019-06-07 16:45 ` Christoph Hellwig
2019-06-09 22:17 ` Nikolay Borisov
2019-06-10 18:30 ` Bart Van Assche
2019-06-06 10:29 ` Christoph Hellwig [this message]
2019-06-07 6:03 ` [PATCH 4/6] block: simplify blk_recalc_rq_segments Hannes Reinecke
2019-06-06 10:29 ` [PATCH 5/6] block: untangle the end of blk_bio_segment_split Christoph Hellwig
2019-06-07 6:04 ` Hannes Reinecke
2019-06-06 10:29 ` [PATCH 6/6] block: mark blk_rq_bio_prep as inline Christoph Hellwig
2019-06-07 6:04 ` Hannes Reinecke
2019-06-20 9:44 ` remove bi_phys_segments and related cleanups Christoph Hellwig
2019-06-20 16:33 ` Jens Axboe
2019-07-01 16:46 ` Jens Axboe
2019-07-02 13:34 ` Christoph Hellwig
[not found] ` <bfe8a4b5-901e-5ac4-e11c-0e6ccc4faec2@kernel.dk>
2019-07-02 18:29 ` Christoph Hellwig
2019-07-02 18:37 ` Jens Axboe
2019-07-03 0:00 ` Christoph Hellwig
2019-07-03 1:10 ` Jens Axboe
2019-07-03 1:32 ` Jens Axboe
2019-07-03 1:35 ` Christoph Hellwig
2019-07-03 12:16 ` Christoph Hellwig
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=20190606102904.4024-5-hch@lst.de \
--to=hch@lst.de \
--cc=axboe@fb.com \
--cc=linux-block@vger.kernel.org \
--cc=mb@lightnvm.io \
/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).