|
@@ -108,7 +108,7 @@ static void end_compressed_bio_read(struct bio *bio)
|
|
struct page *page;
|
|
struct page *page;
|
|
unsigned long index;
|
|
unsigned long index;
|
|
unsigned int mirror = btrfs_io_bio(bio)->mirror_num;
|
|
unsigned int mirror = btrfs_io_bio(bio)->mirror_num;
|
|
- int ret;
|
|
|
|
|
|
+ int ret = 0;
|
|
|
|
|
|
if (bio->bi_status)
|
|
if (bio->bi_status)
|
|
cb->errors = 1;
|
|
cb->errors = 1;
|
|
@@ -127,6 +127,13 @@ static void end_compressed_bio_read(struct bio *bio)
|
|
btrfs_io_bio(cb->orig_bio)->mirror_num = mirror;
|
|
btrfs_io_bio(cb->orig_bio)->mirror_num = mirror;
|
|
cb->mirror_num = mirror;
|
|
cb->mirror_num = mirror;
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Some IO in this cb have failed, just skip checksum as there
|
|
|
|
+ * is no way it could be correct.
|
|
|
|
+ */
|
|
|
|
+ if (cb->errors == 1)
|
|
|
|
+ goto csum_failed;
|
|
|
|
+
|
|
inode = cb->inode;
|
|
inode = cb->inode;
|
|
ret = check_compressed_csum(BTRFS_I(inode), cb,
|
|
ret = check_compressed_csum(BTRFS_I(inode), cb,
|
|
(u64)bio->bi_iter.bi_sector << 9);
|
|
(u64)bio->bi_iter.bi_sector << 9);
|