diff options
-rw-r--r-- | fs/btrfs/compression.c | 8 | ||||
-rw-r--r-- | fs/btrfs/disk-io.c | 11 | ||||
-rw-r--r-- | fs/btrfs/extent_io.c | 50 | ||||
-rw-r--r-- | fs/btrfs/file-item.c | 2 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 19 | ||||
-rw-r--r-- | fs/logfs/dev_bdev.c | 10 |
6 files changed, 52 insertions, 48 deletions
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index a7e16cdd11bc..16dcc22c962a 100644 --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c @@ -198,15 +198,15 @@ csum_failed: if (cb->errors) { bio_io_error(cb->orig_bio); } else { - int i; - struct bio_vec *bvec; + struct bio_vec bvec; + struct bvec_iter iter; /* * we have verified the checksum already, set page * checked so the end_io handlers know about it */ - bio_for_each_segment_all(bvec, cb->orig_bio, i) - SetPageChecked(bvec->bv_page); + bio_for_each_page_all(bvec, cb->orig_bio, iter) + SetPageChecked(bvec.bv_page); bio_endio(cb->orig_bio, 0); } diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 8bb4aa19898f..c79bfd9f02b1 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -855,13 +855,14 @@ int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode, static int btree_csum_one_bio(struct bio *bio) { - struct bio_vec *bvec; + struct bio_vec bvec; + struct bvec_iter iter; struct btrfs_root *root; - int i, ret = 0; + int ret = 0; - bio_for_each_segment_all(bvec, bio, i) { - root = BTRFS_I(bvec->bv_page->mapping->host)->root; - ret = csum_dirty_buffer(root, bvec->bv_page); + bio_for_each_page_all(bvec, bio, iter) { + root = BTRFS_I(bvec.bv_page->mapping->host)->root; + ret = csum_dirty_buffer(root, bvec.bv_page); if (ret) break; } diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 9788a6030d2f..d9a20e7b661c 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -2385,33 +2385,33 @@ int end_extent_writepage(struct page *page, int err, u64 start, u64 end) */ static void end_bio_extent_writepage(struct bio *bio, int err) { - struct bio_vec *bvec; + struct bio_vec bvec; + struct bvec_iter iter; u64 start; u64 end; - int i; - bio_for_each_segment_all(bvec, bio, i) { - struct page *page = bvec->bv_page; + bio_for_each_page_all(bvec, bio, iter) { + struct page *page = bvec.bv_page; /* We always issue full-page reads, but if some block * in a page fails to read, blk_update_request() will * advance bv_offset and adjust bv_len to compensate. * Print a warning for nonzero offsets, and an error * if they don't add up to a full page. */ - if (bvec->bv_offset || bvec->bv_len != PAGE_CACHE_SIZE) { - if (bvec->bv_offset + bvec->bv_len != PAGE_CACHE_SIZE) + if (bvec.bv_offset || bvec.bv_len != PAGE_CACHE_SIZE) { + if (bvec.bv_offset + bvec.bv_len != PAGE_CACHE_SIZE) btrfs_err(BTRFS_I(page->mapping->host)->root->fs_info, "partial page write in btrfs with offset %u and length %u", - bvec->bv_offset, bvec->bv_len); + bvec.bv_offset, bvec.bv_len); else btrfs_info(BTRFS_I(page->mapping->host)->root->fs_info, "incomplete page write in btrfs with offset %u and " "length %u", - bvec->bv_offset, bvec->bv_len); + bvec.bv_offset, bvec.bv_len); } start = page_offset(page); - end = start + bvec->bv_offset + bvec->bv_len - 1; + end = start + bvec.bv_offset + bvec.bv_len - 1; if (end_extent_writepage(page, err, start, end)) continue; @@ -2447,7 +2447,8 @@ endio_readpage_release_extent(struct extent_io_tree *tree, u64 start, u64 len, */ static void end_bio_extent_readpage(struct bio *bio, int err) { - struct bio_vec *bvec; + struct bio_vec bvec; + struct bvec_iter iter; int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags); struct btrfs_io_bio *io_bio = btrfs_io_bio(bio); struct extent_io_tree *tree; @@ -2459,13 +2460,12 @@ static void end_bio_extent_readpage(struct bio *bio, int err) u64 extent_len = 0; int mirror; int ret; - int i; if (err) uptodate = 0; - bio_for_each_segment_all(bvec, bio, i) { - struct page *page = bvec->bv_page; + bio_for_each_page_all(bvec, bio, iter) { + struct page *page = bvec.bv_page; struct inode *inode = page->mapping->host; pr_debug("end_bio_extent_readpage: bi_sector=%llu, err=%d, " @@ -2478,21 +2478,21 @@ static void end_bio_extent_readpage(struct bio *bio, int err) * advance bv_offset and adjust bv_len to compensate. * Print a warning for nonzero offsets, and an error * if they don't add up to a full page. */ - if (bvec->bv_offset || bvec->bv_len != PAGE_CACHE_SIZE) { - if (bvec->bv_offset + bvec->bv_len != PAGE_CACHE_SIZE) + if (bvec.bv_offset || bvec.bv_len != PAGE_CACHE_SIZE) { + if (bvec.bv_offset + bvec.bv_len != PAGE_CACHE_SIZE) btrfs_err(BTRFS_I(page->mapping->host)->root->fs_info, "partial page read in btrfs with offset %u and length %u", - bvec->bv_offset, bvec->bv_len); + bvec.bv_offset, bvec.bv_len); else btrfs_info(BTRFS_I(page->mapping->host)->root->fs_info, "incomplete page read in btrfs with offset %u and " "length %u", - bvec->bv_offset, bvec->bv_len); + bvec.bv_offset, bvec.bv_len); } start = page_offset(page); - end = start + bvec->bv_offset + bvec->bv_len - 1; - len = bvec->bv_len; + end = start + bvec.bv_offset + bvec.bv_len - 1; + len = bvec.bv_len; mirror = io_bio->mirror_num; if (likely(uptodate && tree->ops && @@ -3524,18 +3524,20 @@ static void end_extent_buffer_writeback(struct extent_buffer *eb) static void end_bio_extent_buffer_writepage(struct bio *bio, int err) { - struct bio_vec *bvec; + int uptodate = err == 0; + struct bio_vec bvec; + struct bvec_iter iter; struct extent_buffer *eb; - int i, done; + int done; - bio_for_each_segment_all(bvec, bio, i) { - struct page *page = bvec->bv_page; + bio_for_each_page_all(bvec, bio, iter) { + struct page *page = bvec.bv_page; eb = (struct extent_buffer *)page->private; BUG_ON(!eb); done = atomic_dec_and_test(&eb->io_pages); - if (err || test_bit(EXTENT_BUFFER_IOERR, &eb->bflags)) { + if (!uptodate || test_bit(EXTENT_BUFFER_IOERR, &eb->bflags)) { set_bit(EXTENT_BUFFER_IOERR, &eb->bflags); ClearPageUptodate(page); SetPageError(page); diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index e14113c339d5..780d21ba20bb 100644 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c @@ -457,7 +457,7 @@ int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode, sums->bytenr = (u64)bio->bi_iter.bi_sector << 9; index = 0; - bio_for_each_segment(bvec, bio, iter) { + bio_for_each_page_all(bvec, bio, iter) { if (!contig) offset = page_offset(bvec.bv_page) + bvec.bv_offset; diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index bbb73b9c2264..3e7a7b652933 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -7058,31 +7058,31 @@ unlock_err: static void btrfs_endio_direct_read(struct bio *bio, int err) { struct btrfs_dio_private *dip = bio->bi_private; - struct bio_vec *bvec; + struct bio_vec bvec; + struct bvec_iter iter; struct inode *inode = dip->inode; struct btrfs_root *root = BTRFS_I(inode)->root; struct bio *dio_bio; u32 *csums = (u32 *)dip->csum; u64 start; - int i; + int i = 0; start = dip->logical_offset; - bio_for_each_segment_all(bvec, bio, i) { + bio_for_each_page_all(bvec, bio, iter) { if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) { - struct page *page = bvec->bv_page; char *kaddr; u32 csum = ~(u32)0; unsigned long flags; local_irq_save(flags); - kaddr = kmap_atomic(page); - csum = btrfs_csum_data(kaddr + bvec->bv_offset, - csum, bvec->bv_len); + kaddr = kmap_atomic(bvec.bv_page); + csum = btrfs_csum_data(kaddr + bvec.bv_offset, + csum, bvec.bv_len); btrfs_csum_final(csum, (char *)&csum); kunmap_atomic(kaddr); local_irq_restore(flags); - flush_dcache_page(bvec->bv_page); + flush_dcache_page(bvec.bv_page); if (csum != csums[i]) { btrfs_err(root->fs_info, "csum failed ino %llu off %llu csum %u expected csum %u", btrfs_ino(inode), start, csum, @@ -7091,7 +7091,8 @@ static void btrfs_endio_direct_read(struct bio *bio, int err) } } - start += bvec->bv_len; + start += bvec.bv_len; + i++; } unlock_extent(&BTRFS_I(inode)->io_tree, dip->logical_offset, diff --git a/fs/logfs/dev_bdev.c b/fs/logfs/dev_bdev.c index 4dd6780db205..05253de88b6f 100644 --- a/fs/logfs/dev_bdev.c +++ b/fs/logfs/dev_bdev.c @@ -56,17 +56,17 @@ static DECLARE_WAIT_QUEUE_HEAD(wq); static void writeseg_end_io(struct bio *bio, int err) { const int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags); - struct bio_vec *bvec; - int i; + struct bio_vec bvec; + struct bvec_iter iter; struct super_block *sb = bio->bi_private; struct logfs_super *super = logfs_super(sb); BUG_ON(!uptodate); /* FIXME: Retry io or write elsewhere */ BUG_ON(err); - bio_for_each_segment_all(bvec, bio, i) { - end_page_writeback(bvec->bv_page); - page_cache_release(bvec->bv_page); + bio_for_each_page_all(bvec, bio, iter) { + end_page_writeback(bvec.bv_page); + page_cache_release(bvec.bv_page); } bio_put(bio); if (atomic_dec_and_test(&super->s_pending_writes)) |