forked from Minki/linux
block: convert to using sg helpers
Convert the main rq mapper (blk_rq_map_sg()) to the sg helper setup. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
96b418c960
commit
f565913ef8
@ -30,6 +30,7 @@
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/blktrace_api.h>
|
||||
#include <linux/fault-inject.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
/*
|
||||
* for max sense size
|
||||
@ -1318,9 +1319,10 @@ static int blk_hw_contig_segment(struct request_queue *q, struct bio *bio,
|
||||
* must make sure sg can hold rq->nr_phys_segments entries
|
||||
*/
|
||||
int blk_rq_map_sg(struct request_queue *q, struct request *rq,
|
||||
struct scatterlist *sg)
|
||||
struct scatterlist *sglist)
|
||||
{
|
||||
struct bio_vec *bvec, *bvprv;
|
||||
struct scatterlist *next_sg, *sg;
|
||||
struct req_iterator iter;
|
||||
int nsegs, cluster;
|
||||
|
||||
@ -1331,11 +1333,12 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq,
|
||||
* for each bio in rq
|
||||
*/
|
||||
bvprv = NULL;
|
||||
sg = next_sg = &sglist[0];
|
||||
rq_for_each_segment(bvec, rq, iter) {
|
||||
int nbytes = bvec->bv_len;
|
||||
|
||||
if (bvprv && cluster) {
|
||||
if (sg[nsegs - 1].length + nbytes > q->max_segment_size)
|
||||
if (sg->length + nbytes > q->max_segment_size)
|
||||
goto new_segment;
|
||||
|
||||
if (!BIOVEC_PHYS_MERGEABLE(bvprv, bvec))
|
||||
@ -1343,14 +1346,15 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq,
|
||||
if (!BIOVEC_SEG_BOUNDARY(q, bvprv, bvec))
|
||||
goto new_segment;
|
||||
|
||||
sg[nsegs - 1].length += nbytes;
|
||||
sg->length += nbytes;
|
||||
} else {
|
||||
new_segment:
|
||||
memset(&sg[nsegs],0,sizeof(struct scatterlist));
|
||||
sg[nsegs].page = bvec->bv_page;
|
||||
sg[nsegs].length = nbytes;
|
||||
sg[nsegs].offset = bvec->bv_offset;
|
||||
sg = next_sg;
|
||||
next_sg = sg_next(sg);
|
||||
|
||||
sg->page = bvec->bv_page;
|
||||
sg->length = nbytes;
|
||||
sg->offset = bvec->bv_offset;
|
||||
nsegs++;
|
||||
}
|
||||
bvprv = bvec;
|
||||
|
Loading…
Reference in New Issue
Block a user