diff options
author | Kent Overstreet <koverstreet@google.com> | 2012-09-05 18:22:02 -0400 |
---|---|---|
committer | Kent Overstreet <koverstreet@google.com> | 2013-03-23 17:26:30 -0400 |
commit | cb34e057ad22a1c2c6f2cb6cd1cbd05cc2f28f28 (patch) | |
tree | 4077b8e6e88bc7c5eb4cd738b4203401daba28a9 /fs/direct-io.c | |
parent | d74c6d514fe314b8bdab58b487b25992291577ec (diff) |
block: Convert some code to bio_for_each_segment_all()
More prep work for immutable bvecs:
A few places in the code were either open coding or using the wrong
version - fix.
After we introduce the bvec iter, it'll no longer be possible to modify
the biovec through bio_for_each_segment_all() - it doesn't increment a
pointer to the current bvec, you pass in a struct bio_vec (not a
pointer) which is updated with what the current biovec would be (taking
into account bi_bvec_done and bi_size).
So because of that it's more worthwhile to be consistent about
bio_for_each_segment()/bio_for_each_segment_all() usage.
Signed-off-by: Kent Overstreet <koverstreet@google.com>
CC: Jens Axboe <axboe@kernel.dk>
CC: NeilBrown <neilb@suse.de>
CC: Alasdair Kergon <agk@redhat.com>
CC: dm-devel@redhat.com
CC: Alexander Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/direct-io.c')
-rw-r--r-- | fs/direct-io.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/direct-io.c b/fs/direct-io.c index f853263cf74f..38484b08a39a 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c | |||
@@ -441,8 +441,8 @@ static struct bio *dio_await_one(struct dio *dio) | |||
441 | static int dio_bio_complete(struct dio *dio, struct bio *bio) | 441 | static int dio_bio_complete(struct dio *dio, struct bio *bio) |
442 | { | 442 | { |
443 | const int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags); | 443 | const int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags); |
444 | struct bio_vec *bvec = bio->bi_io_vec; | 444 | struct bio_vec *bvec; |
445 | int page_no; | 445 | unsigned i; |
446 | 446 | ||
447 | if (!uptodate) | 447 | if (!uptodate) |
448 | dio->io_error = -EIO; | 448 | dio->io_error = -EIO; |
@@ -450,8 +450,8 @@ static int dio_bio_complete(struct dio *dio, struct bio *bio) | |||
450 | if (dio->is_async && dio->rw == READ) { | 450 | if (dio->is_async && dio->rw == READ) { |
451 | bio_check_pages_dirty(bio); /* transfers ownership */ | 451 | bio_check_pages_dirty(bio); /* transfers ownership */ |
452 | } else { | 452 | } else { |
453 | for (page_no = 0; page_no < bio->bi_vcnt; page_no++) { | 453 | bio_for_each_segment_all(bvec, bio, i) { |
454 | struct page *page = bvec[page_no].bv_page; | 454 | struct page *page = bvec->bv_page; |
455 | 455 | ||
456 | if (dio->rw == READ && !PageCompound(page)) | 456 | if (dio->rw == READ && !PageCompound(page)) |
457 | set_page_dirty_lock(page); | 457 | set_page_dirty_lock(page); |