diff options
author | Kent Overstreet <kmo@daterainc.com> | 2013-10-11 18:45:43 -0400 |
---|---|---|
committer | Kent Overstreet <kmo@daterainc.com> | 2013-11-24 01:33:51 -0500 |
commit | 003b5c5719f159f4f4bf97511c4702a0638313dd (patch) | |
tree | 1b3cac74e22ae5a87fdb6e3066f2d728913e6e0c /drivers/md/dm-io.c | |
parent | 458b76ed2f9517becb74dcc8eedd70d3068ea6e4 (diff) |
block: Convert drivers to immutable biovecs
Now that we've got a mechanism for immutable biovecs -
bi_iter.bi_bvec_done - we need to convert drivers to use primitives that
respect it instead of using the bvec array directly.
Signed-off-by: Kent Overstreet <kmo@daterainc.com>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: NeilBrown <neilb@suse.de>
Cc: Alasdair Kergon <agk@redhat.com>
Cc: dm-devel@redhat.com
Diffstat (limited to 'drivers/md/dm-io.c')
-rw-r--r-- | drivers/md/dm-io.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c index 01558b093307..b2b8a10e8427 100644 --- a/drivers/md/dm-io.c +++ b/drivers/md/dm-io.c | |||
@@ -201,26 +201,29 @@ static void list_dp_init(struct dpages *dp, struct page_list *pl, unsigned offse | |||
201 | /* | 201 | /* |
202 | * Functions for getting the pages from a bvec. | 202 | * Functions for getting the pages from a bvec. |
203 | */ | 203 | */ |
204 | static void bvec_get_page(struct dpages *dp, | 204 | static void bio_get_page(struct dpages *dp, |
205 | struct page **p, unsigned long *len, unsigned *offset) | 205 | struct page **p, unsigned long *len, unsigned *offset) |
206 | { | 206 | { |
207 | struct bio_vec *bvec = (struct bio_vec *) dp->context_ptr; | 207 | struct bio *bio = dp->context_ptr; |
208 | *p = bvec->bv_page; | 208 | struct bio_vec bvec = bio_iovec(bio); |
209 | *len = bvec->bv_len; | 209 | *p = bvec.bv_page; |
210 | *offset = bvec->bv_offset; | 210 | *len = bvec.bv_len; |
211 | *offset = bvec.bv_offset; | ||
211 | } | 212 | } |
212 | 213 | ||
213 | static void bvec_next_page(struct dpages *dp) | 214 | static void bio_next_page(struct dpages *dp) |
214 | { | 215 | { |
215 | struct bio_vec *bvec = (struct bio_vec *) dp->context_ptr; | 216 | struct bio *bio = dp->context_ptr; |
216 | dp->context_ptr = bvec + 1; | 217 | struct bio_vec bvec = bio_iovec(bio); |
218 | |||
219 | bio_advance(bio, bvec.bv_len); | ||
217 | } | 220 | } |
218 | 221 | ||
219 | static void bvec_dp_init(struct dpages *dp, struct bio_vec *bvec) | 222 | static void bio_dp_init(struct dpages *dp, struct bio *bio) |
220 | { | 223 | { |
221 | dp->get_page = bvec_get_page; | 224 | dp->get_page = bio_get_page; |
222 | dp->next_page = bvec_next_page; | 225 | dp->next_page = bio_next_page; |
223 | dp->context_ptr = bvec; | 226 | dp->context_ptr = bio; |
224 | } | 227 | } |
225 | 228 | ||
226 | /* | 229 | /* |
@@ -457,8 +460,8 @@ static int dp_init(struct dm_io_request *io_req, struct dpages *dp, | |||
457 | list_dp_init(dp, io_req->mem.ptr.pl, io_req->mem.offset); | 460 | list_dp_init(dp, io_req->mem.ptr.pl, io_req->mem.offset); |
458 | break; | 461 | break; |
459 | 462 | ||
460 | case DM_IO_BVEC: | 463 | case DM_IO_BIO: |
461 | bvec_dp_init(dp, io_req->mem.ptr.bvec); | 464 | bio_dp_init(dp, io_req->mem.ptr.bio); |
462 | break; | 465 | break; |
463 | 466 | ||
464 | case DM_IO_VMA: | 467 | case DM_IO_VMA: |