Commit ff9811b3 authored by Bart Van Assche's avatar Bart Van Assche Committed by Jens Axboe

block: Simplify bvec_split_segs()

Simplify this function by by removing two if-tests. Other than requiring
that the @sectors pointer is not NULL, this patch does not change the
behavior of bvec_split_segs().
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Ming Lei <ming.lei@redhat.com>
Cc: Hannes Reinecke <hare@suse.com>
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent dad77584
...@@ -167,17 +167,17 @@ static bool bvec_split_segs(const struct request_queue *q, ...@@ -167,17 +167,17 @@ static bool bvec_split_segs(const struct request_queue *q,
{ {
unsigned len = bv->bv_len; unsigned len = bv->bv_len;
unsigned total_len = 0; unsigned total_len = 0;
unsigned new_nsegs = 0, seg_size = 0; unsigned seg_size = 0;
/* /*
* Multi-page bvec may be too big to hold in one segment, so the * Multi-page bvec may be too big to hold in one segment, so the
* current bvec has to be splitted as multiple segments. * current bvec has to be splitted as multiple segments.
*/ */
while (len && new_nsegs + *nsegs < max_segs) { while (len && *nsegs < max_segs) {
seg_size = get_max_segment_size(q, bv->bv_offset + total_len); seg_size = get_max_segment_size(q, bv->bv_offset + total_len);
seg_size = min(seg_size, len); seg_size = min(seg_size, len);
new_nsegs++; (*nsegs)++;
total_len += seg_size; total_len += seg_size;
len -= seg_size; len -= seg_size;
...@@ -185,11 +185,7 @@ static bool bvec_split_segs(const struct request_queue *q, ...@@ -185,11 +185,7 @@ static bool bvec_split_segs(const struct request_queue *q,
break; break;
} }
if (new_nsegs) {
*nsegs += new_nsegs;
if (sectors)
*sectors += total_len >> 9; *sectors += total_len >> 9;
}
/* split in the middle of the bvec if len != 0 */ /* split in the middle of the bvec if len != 0 */
return !!len; return !!len;
...@@ -349,6 +345,7 @@ EXPORT_SYMBOL(blk_queue_split); ...@@ -349,6 +345,7 @@ EXPORT_SYMBOL(blk_queue_split);
unsigned int blk_recalc_rq_segments(struct request *rq) unsigned int blk_recalc_rq_segments(struct request *rq)
{ {
unsigned int nr_phys_segs = 0; unsigned int nr_phys_segs = 0;
unsigned int nr_sectors = 0;
struct req_iterator iter; struct req_iterator iter;
struct bio_vec bv; struct bio_vec bv;
...@@ -365,7 +362,8 @@ unsigned int blk_recalc_rq_segments(struct request *rq) ...@@ -365,7 +362,8 @@ unsigned int blk_recalc_rq_segments(struct request *rq)
} }
rq_for_each_bvec(bv, rq, iter) rq_for_each_bvec(bv, rq, iter)
bvec_split_segs(rq->q, &bv, &nr_phys_segs, NULL, UINT_MAX); bvec_split_segs(rq->q, &bv, &nr_phys_segs, &nr_sectors,
UINT_MAX);
return nr_phys_segs; return nr_phys_segs;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment