aboutsummaryrefslogtreecommitdiffstats
path: root/fs/direct-io.c
diff options
context:
space:
mode:
authorKent Overstreet <koverstreet@google.com>2012-09-05 18:22:02 -0400
committerKent Overstreet <koverstreet@google.com>2013-03-23 17:26:30 -0400
commitcb34e057ad22a1c2c6f2cb6cd1cbd05cc2f28f28 (patch)
tree4077b8e6e88bc7c5eb4cd738b4203401daba28a9 /fs/direct-io.c
parentd74c6d514fe314b8bdab58b487b25992291577ec (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.c8
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)
441static int dio_bio_complete(struct dio *dio, struct bio *bio) 441static 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);