aboutsummaryrefslogtreecommitdiffstats
path: root/fs/bio.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/bio.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/bio.c')
-rw-r--r--fs/bio.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/fs/bio.c b/fs/bio.c
index 618f9044c414..fe3aee90c988 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -1548,11 +1548,11 @@ EXPORT_SYMBOL(bio_copy_kern);
1548 */ 1548 */
1549void bio_set_pages_dirty(struct bio *bio) 1549void 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
1562static void bio_release_pages(struct bio *bio) 1562static 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
1615void bio_check_pages_dirty(struct bio *bio) 1615void 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 }