On Tue, Apr 09, 2019 at 04:38:41AM -0700, Matthew Wilcox wrote: > > +++ b/fs/btrfs/inode.c > > @@ -7919,7 +7918,7 @@ static void btrfs_retry_endio(struct bio *bio) > > struct bio_vec *bvec; > > int uptodate; > > int ret; > > - int i; > > + int i = 0; > > struct bvec_iter_all iter_all; > > > > if (bio->bi_status) > > @@ -7934,7 +7933,7 @@ static void btrfs_retry_endio(struct bio *bio) > > failure_tree = &BTRFS_I(inode)->io_failure_tree; > > > > ASSERT(!bio_flagged(bio, BIO_CLONED)); > > - bio_for_each_segment_all(bvec, bio, i, iter_all) { > > + bio_for_each_segment_all(bvec, bio, iter_all) { > > ret = __readpage_endio_check(inode, io_bio, i, bvec->bv_page, > > bvec->bv_offset, done->start, > > bvec->bv_len); > > @@ -7946,6 +7945,7 @@ static void btrfs_retry_endio(struct bio *bio) > > bvec->bv_offset); > > else > > uptodate = 0; > > + i++; > > } > > I'd be tempted to instead: > > @@ -7935,7 +7935,7 @@ static void btrfs_retry_endio(struct bio *bio) > > ASSERT(!bio_flagged(bio, BIO_CLONED)); > bio_for_each_segment_all(bvec, bio, i, iter_all) { > - ret = __readpage_endio_check(inode, io_bio, i, bvec->bv_page, > + ret = __readpage_endio_check(inode, io_bio, i++, bvec->bv_page, > bvec->bv_offset, done->start, > bvec->bv_len); > if (!ret) > > (i is used nowhere else in this loop, and it's a mercifully short loop with > no breaks or continues). I'd rather keep the separate statement than having parameters with sideefects.