|
@@ -8180,6 +8180,7 @@ static int __btrfs_subio_endio_read(struct inode *inode,
|
|
|
int nr_sectors;
|
|
|
unsigned int pgoff;
|
|
|
int csum_pos;
|
|
|
+ bool uptodate = (err == 0);
|
|
|
int ret;
|
|
|
|
|
|
fs_info = BTRFS_I(inode)->root->fs_info;
|
|
@@ -8195,12 +8196,13 @@ static int __btrfs_subio_endio_read(struct inode *inode,
|
|
|
|
|
|
pgoff = bvec.bv_offset;
|
|
|
next_block:
|
|
|
- csum_pos = BTRFS_BYTES_TO_BLKS(fs_info, offset);
|
|
|
- ret = __readpage_endio_check(inode, io_bio, csum_pos,
|
|
|
- bvec.bv_page, pgoff, start,
|
|
|
- sectorsize);
|
|
|
- if (likely(!ret))
|
|
|
- goto next;
|
|
|
+ if (uptodate) {
|
|
|
+ csum_pos = BTRFS_BYTES_TO_BLKS(fs_info, offset);
|
|
|
+ ret = __readpage_endio_check(inode, io_bio, csum_pos,
|
|
|
+ bvec.bv_page, pgoff, start, sectorsize);
|
|
|
+ if (likely(!ret))
|
|
|
+ goto next;
|
|
|
+ }
|
|
|
try_again:
|
|
|
done.uptodate = 0;
|
|
|
done.start = start;
|