Introduce rq_for_each_segment replacing rq_for_each_bio
Every usage of rq_for_each_bio wraps a usage of bio_for_each_segment, so these can be combined into rq_for_each_segment. We define "struct req_iterator" to hold the 'bio' and 'index' that are needed for the double iteration. Signed-off-by: Neil Brown <neilb@suse.de> Various compile fixes by me... Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Esse commit está contido em:
@@ -623,21 +623,19 @@ tape_3590_bread(struct tape_device *device, struct request *req)
|
||||
{
|
||||
struct tape_request *request;
|
||||
struct ccw1 *ccw;
|
||||
int count = 0, start_block, i;
|
||||
int count = 0, start_block;
|
||||
unsigned off;
|
||||
char *dst;
|
||||
struct bio_vec *bv;
|
||||
struct bio *bio;
|
||||
struct req_iterator iter;
|
||||
|
||||
DBF_EVENT(6, "xBREDid:");
|
||||
start_block = req->sector >> TAPEBLOCK_HSEC_S2B;
|
||||
DBF_EVENT(6, "start_block = %i\n", start_block);
|
||||
|
||||
rq_for_each_bio(bio, req) {
|
||||
bio_for_each_segment(bv, bio, i) {
|
||||
count += bv->bv_len >> (TAPEBLOCK_HSEC_S2B + 9);
|
||||
}
|
||||
}
|
||||
rq_for_each_segment(bv, req, iter)
|
||||
count += bv->bv_len >> (TAPEBLOCK_HSEC_S2B + 9);
|
||||
|
||||
request = tape_alloc_request(2 + count + 1, 4);
|
||||
if (IS_ERR(request))
|
||||
return request;
|
||||
@@ -653,8 +651,7 @@ tape_3590_bread(struct tape_device *device, struct request *req)
|
||||
*/
|
||||
ccw = tape_ccw_cc(ccw, NOP, 0, NULL);
|
||||
|
||||
rq_for_each_bio(bio, req) {
|
||||
bio_for_each_segment(bv, bio, i) {
|
||||
rq_for_each_segment(bv, req, iter) {
|
||||
dst = page_address(bv->bv_page) + bv->bv_offset;
|
||||
for (off = 0; off < bv->bv_len;
|
||||
off += TAPEBLOCK_HSEC_SIZE) {
|
||||
@@ -667,7 +664,6 @@ tape_3590_bread(struct tape_device *device, struct request *req)
|
||||
}
|
||||
if (off > bv->bv_len)
|
||||
BUG();
|
||||
}
|
||||
}
|
||||
ccw = tape_ccw_end(ccw, NOP, 0, NULL);
|
||||
DBF_EVENT(6, "xBREDccwg\n");
|
||||
|
Referência em uma nova issue
Block a user