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/bio.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/bio.c')
-rw-r--r-- | fs/bio.c | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -1548,11 +1548,11 @@ EXPORT_SYMBOL(bio_copy_kern); | |||
1548 | */ | 1548 | */ |
1549 | void bio_set_pages_dirty(struct bio *bio) | 1549 | void bio_set_pages_dirty(struct bio *bio) |
1550 | { | 1550 | { |
1551 | struct bio_vec *bvec = bio->bi_io_vec; | 1551 | struct bio_vec *bvec; |
1552 | int i; | 1552 | int i; |
1553 | 1553 | ||
1554 | for (i = 0; i < bio->bi_vcnt; i++) { | 1554 | bio_for_each_segment_all(bvec, bio, i) { |
1555 | struct page *page = bvec[i].bv_page; | 1555 | struct page *page = bvec->bv_page; |
1556 | 1556 | ||
1557 | if (page && !PageCompound(page)) | 1557 | if (page && !PageCompound(page)) |
1558 | set_page_dirty_lock(page); | 1558 | set_page_dirty_lock(page); |
@@ -1561,11 +1561,11 @@ void bio_set_pages_dirty(struct bio *bio) | |||
1561 | 1561 | ||
1562 | static void bio_release_pages(struct bio *bio) | 1562 | static void bio_release_pages(struct bio *bio) |
1563 | { | 1563 | { |
1564 | struct bio_vec *bvec = bio->bi_io_vec; | 1564 | struct bio_vec *bvec; |
1565 | int i; | 1565 | int i; |
1566 | 1566 | ||
1567 | for (i = 0; i < bio->bi_vcnt; i++) { | 1567 | bio_for_each_segment_all(bvec, bio, i) { |
1568 | struct page *page = bvec[i].bv_page; | 1568 | struct page *page = bvec->bv_page; |
1569 | 1569 | ||
1570 | if (page) | 1570 | if (page) |
1571 | put_page(page); | 1571 | put_page(page); |
@@ -1614,16 +1614,16 @@ static void bio_dirty_fn(struct work_struct *work) | |||
1614 | 1614 | ||
1615 | void bio_check_pages_dirty(struct bio *bio) | 1615 | void bio_check_pages_dirty(struct bio *bio) |
1616 | { | 1616 | { |
1617 | struct bio_vec *bvec = bio->bi_io_vec; | 1617 | struct bio_vec *bvec; |
1618 | int nr_clean_pages = 0; | 1618 | int nr_clean_pages = 0; |
1619 | int i; | 1619 | int i; |
1620 | 1620 | ||
1621 | for (i = 0; i < bio->bi_vcnt; i++) { | 1621 | bio_for_each_segment_all(bvec, bio, i) { |
1622 | struct page *page = bvec[i].bv_page; | 1622 | struct page *page = bvec->bv_page; |
1623 | 1623 | ||
1624 | if (PageDirty(page) || PageCompound(page)) { | 1624 | if (PageDirty(page) || PageCompound(page)) { |
1625 | page_cache_release(page); | 1625 | page_cache_release(page); |
1626 | bvec[i].bv_page = NULL; | 1626 | bvec->bv_page = NULL; |
1627 | } else { | 1627 | } else { |
1628 | nr_clean_pages++; | 1628 | nr_clean_pages++; |
1629 | } | 1629 | } |