Skip to content

Commit a4ad39b

Browse files
author
Kent Overstreet
committed
block: Convert bio_iovec() to bvec_iter
For immutable biovecs, we'll be introducing a new bio_iovec() that uses our new bvec iterator to construct a biovec, taking into account bvec_iter->bi_bvec_done - this patch updates existing users for the new usage. Some of the existing users really do need a pointer into the bvec array - those uses are all going to be removed, but we'll need the functionality from immutable to remove them - so for now rename the existing bio_iovec() -> __bio_iovec(), and it'll be removed in a couple patches. Signed-off-by: Kent Overstreet <[email protected]> Cc: Jens Axboe <[email protected]> Cc: "Ed L. Cashin" <[email protected]> Cc: Alasdair Kergon <[email protected]> Cc: [email protected] Cc: "James E.J. Bottomley" <[email protected]>
1 parent 75d5d81 commit a4ad39b

File tree

6 files changed

+26
-23
lines changed

6 files changed

+26
-23
lines changed

drivers/block/aoe/aoecmd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,7 @@ bufinit(struct buf *buf, struct request *rq, struct bio *bio)
932932
buf->resid = bio->bi_iter.bi_size;
933933
buf->sector = bio->bi_iter.bi_sector;
934934
bio_pageinc(bio);
935-
buf->bv = bio_iovec(bio);
935+
buf->bv = __bio_iovec(bio);
936936
buf->bv_resid = buf->bv->bv_len;
937937
WARN_ON(buf->bv_resid == 0);
938938
}

drivers/md/bcache/io.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ static void bch_bi_idx_hack_endio(struct bio *bio, int error)
2222
static void bch_generic_make_request_hack(struct bio *bio)
2323
{
2424
if (bio->bi_iter.bi_idx) {
25+
int i;
26+
struct bio_vec *bv;
2527
struct bio *clone = bio_alloc(GFP_NOIO, bio_segments(bio));
2628

27-
memcpy(clone->bi_io_vec,
28-
bio_iovec(bio),
29-
bio_segments(bio) * sizeof(struct bio_vec));
29+
bio_for_each_segment(bv, bio, i)
30+
clone->bi_io_vec[clone->bi_vcnt++] = *bv;
3031

3132
clone->bi_iter.bi_sector = bio->bi_iter.bi_sector;
3233
clone->bi_bdev = bio->bi_bdev;
@@ -97,7 +98,7 @@ struct bio *bch_bio_split(struct bio *bio, int sectors,
9798
if (!ret)
9899
return NULL;
99100

100-
memcpy(ret->bi_io_vec, bio_iovec(bio),
101+
memcpy(ret->bi_io_vec, __bio_iovec(bio),
101102
sizeof(struct bio_vec) * vcnt);
102103

103104
break;
@@ -106,7 +107,7 @@ struct bio *bch_bio_split(struct bio *bio, int sectors,
106107
if (!ret)
107108
return NULL;
108109

109-
memcpy(ret->bi_io_vec, bio_iovec(bio),
110+
memcpy(ret->bi_io_vec, __bio_iovec(bio),
110111
sizeof(struct bio_vec) * vcnt);
111112

112113
ret->bi_io_vec[vcnt - 1].bv_len = nbytes;
@@ -182,7 +183,7 @@ static unsigned bch_bio_max_sectors(struct bio *bio)
182183
ret = min(ret, queue_max_sectors(q));
183184

184185
WARN_ON(!ret);
185-
ret = max_t(int, ret, bio_iovec(bio)->bv_len >> 9);
186+
ret = max_t(int, ret, bio_iovec(bio).bv_len >> 9);
186187

187188
return ret;
188189
}

drivers/md/dm-verity.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ static int verity_map(struct dm_target *ti, struct bio *bio)
524524
io->io_vec = io->io_vec_inline;
525525
else
526526
io->io_vec = mempool_alloc(v->vec_mempool, GFP_NOIO);
527-
memcpy(io->io_vec, bio_iovec(bio),
527+
memcpy(io->io_vec, __bio_iovec(bio),
528528
io->io_vec_size * sizeof(struct bio_vec));
529529

530530
verity_submit_prefetch(v, io);

drivers/scsi/sd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ static int sd_setup_write_same_cmnd(struct scsi_device *sdp, struct request *rq)
801801
if (sdkp->device->no_write_same)
802802
return BLKPREP_KILL;
803803

804-
BUG_ON(bio_offset(bio) || bio_iovec(bio)->bv_len != sdp->sector_size);
804+
BUG_ON(bio_offset(bio) || bio_iovec(bio).bv_len != sdp->sector_size);
805805

806806
sector >>= ilog2(sdp->sector_size) - 9;
807807
nr_sectors >>= ilog2(sdp->sector_size) - 9;

fs/bio.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -821,12 +821,12 @@ void bio_advance(struct bio *bio, unsigned bytes)
821821
break;
822822
}
823823

824-
if (bytes >= bio_iovec(bio)->bv_len) {
825-
bytes -= bio_iovec(bio)->bv_len;
824+
if (bytes >= bio_iovec(bio).bv_len) {
825+
bytes -= bio_iovec(bio).bv_len;
826826
bio->bi_iter.bi_idx++;
827827
} else {
828-
bio_iovec(bio)->bv_len -= bytes;
829-
bio_iovec(bio)->bv_offset += bytes;
828+
bio_iovec(bio).bv_len -= bytes;
829+
bio_iovec(bio).bv_offset += bytes;
830830
bytes = 0;
831831
}
832832
}
@@ -879,8 +879,8 @@ void bio_copy_data(struct bio *dst, struct bio *src)
879879
unsigned src_offset, dst_offset, bytes;
880880
void *src_p, *dst_p;
881881

882-
src_bv = bio_iovec(src);
883-
dst_bv = bio_iovec(dst);
882+
src_bv = __bio_iovec(src);
883+
dst_bv = __bio_iovec(dst);
884884

885885
src_offset = src_bv->bv_offset;
886886
dst_offset = dst_bv->bv_offset;
@@ -893,7 +893,7 @@ void bio_copy_data(struct bio *dst, struct bio *src)
893893
if (!src)
894894
break;
895895

896-
src_bv = bio_iovec(src);
896+
src_bv = __bio_iovec(src);
897897
}
898898

899899
src_offset = src_bv->bv_offset;
@@ -906,7 +906,7 @@ void bio_copy_data(struct bio *dst, struct bio *src)
906906
if (!dst)
907907
break;
908908

909-
dst_bv = bio_iovec(dst);
909+
dst_bv = __bio_iovec(dst);
910910
}
911911

912912
dst_offset = dst_bv->bv_offset;
@@ -1776,8 +1776,8 @@ struct bio_pair *bio_split(struct bio *bi, int first_sectors)
17761776
bp->bio1.bi_iter.bi_size = first_sectors << 9;
17771777

17781778
if (bi->bi_vcnt != 0) {
1779-
bp->bv1 = *bio_iovec(bi);
1780-
bp->bv2 = *bio_iovec(bi);
1779+
bp->bv1 = bio_iovec(bi);
1780+
bp->bv2 = bio_iovec(bi);
17811781

17821782
if (bio_is_rw(bi)) {
17831783
bp->bv2.bv_offset += first_sectors << 9;

include/linux/bio.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,19 @@
6262
* on highmem page vectors
6363
*/
6464
#define bio_iovec_idx(bio, idx) (&((bio)->bi_io_vec[(idx)]))
65-
#define bio_iovec(bio) bio_iovec_idx((bio), (bio)->bi_iter.bi_idx)
66-
#define bio_page(bio) bio_iovec((bio))->bv_page
67-
#define bio_offset(bio) bio_iovec((bio))->bv_offset
65+
#define __bio_iovec(bio) bio_iovec_idx((bio), (bio)->bi_iter.bi_idx)
66+
#define bio_iovec(bio) (*__bio_iovec(bio))
67+
68+
#define bio_page(bio) (bio_iovec((bio)).bv_page)
69+
#define bio_offset(bio) (bio_iovec((bio)).bv_offset)
6870
#define bio_segments(bio) ((bio)->bi_vcnt - (bio)->bi_iter.bi_idx)
6971
#define bio_sectors(bio) ((bio)->bi_iter.bi_size >> 9)
7072
#define bio_end_sector(bio) ((bio)->bi_iter.bi_sector + bio_sectors((bio)))
7173

7274
static inline unsigned int bio_cur_bytes(struct bio *bio)
7375
{
7476
if (bio->bi_vcnt)
75-
return bio_iovec(bio)->bv_len;
77+
return bio_iovec(bio).bv_len;
7678
else /* dataless requests such as discard */
7779
return bio->bi_iter.bi_size;
7880
}

0 commit comments

Comments
 (0)