diff options
| -rw-r--r-- | fs/btrfs/disk-io.c | 4 | ||||
| -rw-r--r-- | fs/btrfs/inode.c | 70 | ||||
| -rw-r--r-- | fs/btrfs/raid56.c | 34 | ||||
| -rw-r--r-- | fs/btrfs/volumes.c | 10 | ||||
| -rw-r--r-- | fs/btrfs/volumes.h | 6 |
5 files changed, 64 insertions, 60 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 080e2ebb8aa0..f45b61fe9a9a 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
| @@ -3516,7 +3516,7 @@ static blk_status_t wait_dev_flush(struct btrfs_device *device) | |||
| 3516 | struct bio *bio = device->flush_bio; | 3516 | struct bio *bio = device->flush_bio; |
| 3517 | 3517 | ||
| 3518 | if (!device->flush_bio_sent) | 3518 | if (!device->flush_bio_sent) |
| 3519 | return 0; | 3519 | return BLK_STS_OK; |
| 3520 | 3520 | ||
| 3521 | device->flush_bio_sent = 0; | 3521 | device->flush_bio_sent = 0; |
| 3522 | wait_for_completion_io(&device->flush_wait); | 3522 | wait_for_completion_io(&device->flush_wait); |
| @@ -3563,7 +3563,7 @@ static int barrier_all_devices(struct btrfs_fs_info *info) | |||
| 3563 | continue; | 3563 | continue; |
| 3564 | 3564 | ||
| 3565 | write_dev_flush(dev); | 3565 | write_dev_flush(dev); |
| 3566 | dev->last_flush_error = 0; | 3566 | dev->last_flush_error = BLK_STS_OK; |
| 3567 | } | 3567 | } |
| 3568 | 3568 | ||
| 3569 | /* wait for all the barriers */ | 3569 | /* wait for all the barriers */ |
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 95c212037095..24bcd5cd9cf2 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
| @@ -7924,11 +7924,12 @@ err: | |||
| 7924 | return ret; | 7924 | return ret; |
| 7925 | } | 7925 | } |
| 7926 | 7926 | ||
| 7927 | static inline int submit_dio_repair_bio(struct inode *inode, struct bio *bio, | 7927 | static inline blk_status_t submit_dio_repair_bio(struct inode *inode, |
| 7928 | int mirror_num) | 7928 | struct bio *bio, |
| 7929 | int mirror_num) | ||
| 7929 | { | 7930 | { |
| 7930 | struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); | 7931 | struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); |
| 7931 | int ret; | 7932 | blk_status_t ret; |
| 7932 | 7933 | ||
| 7933 | BUG_ON(bio_op(bio) == REQ_OP_WRITE); | 7934 | BUG_ON(bio_op(bio) == REQ_OP_WRITE); |
| 7934 | 7935 | ||
| @@ -7980,10 +7981,10 @@ static int btrfs_check_dio_repairable(struct inode *inode, | |||
| 7980 | return 1; | 7981 | return 1; |
| 7981 | } | 7982 | } |
| 7982 | 7983 | ||
| 7983 | static int dio_read_error(struct inode *inode, struct bio *failed_bio, | 7984 | static blk_status_t dio_read_error(struct inode *inode, struct bio *failed_bio, |
| 7984 | struct page *page, unsigned int pgoff, | 7985 | struct page *page, unsigned int pgoff, |
| 7985 | u64 start, u64 end, int failed_mirror, | 7986 | u64 start, u64 end, int failed_mirror, |
| 7986 | bio_end_io_t *repair_endio, void *repair_arg) | 7987 | bio_end_io_t *repair_endio, void *repair_arg) |
| 7987 | { | 7988 | { |
| 7988 | struct io_failure_record *failrec; | 7989 | struct io_failure_record *failrec; |
| 7989 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; | 7990 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; |
| @@ -7993,18 +7994,19 @@ static int dio_read_error(struct inode *inode, struct bio *failed_bio, | |||
| 7993 | int read_mode = 0; | 7994 | int read_mode = 0; |
| 7994 | int segs; | 7995 | int segs; |
| 7995 | int ret; | 7996 | int ret; |
| 7997 | blk_status_t status; | ||
| 7996 | 7998 | ||
| 7997 | BUG_ON(bio_op(failed_bio) == REQ_OP_WRITE); | 7999 | BUG_ON(bio_op(failed_bio) == REQ_OP_WRITE); |
| 7998 | 8000 | ||
| 7999 | ret = btrfs_get_io_failure_record(inode, start, end, &failrec); | 8001 | ret = btrfs_get_io_failure_record(inode, start, end, &failrec); |
| 8000 | if (ret) | 8002 | if (ret) |
| 8001 | return ret; | 8003 | return errno_to_blk_status(ret); |
| 8002 | 8004 | ||
| 8003 | ret = btrfs_check_dio_repairable(inode, failed_bio, failrec, | 8005 | ret = btrfs_check_dio_repairable(inode, failed_bio, failrec, |
| 8004 | failed_mirror); | 8006 | failed_mirror); |
| 8005 | if (!ret) { | 8007 | if (!ret) { |
| 8006 | free_io_failure(failure_tree, io_tree, failrec); | 8008 | free_io_failure(failure_tree, io_tree, failrec); |
| 8007 | return -EIO; | 8009 | return BLK_STS_IOERR; |
| 8008 | } | 8010 | } |
| 8009 | 8011 | ||
| 8010 | segs = bio_segments(failed_bio); | 8012 | segs = bio_segments(failed_bio); |
| @@ -8022,13 +8024,13 @@ static int dio_read_error(struct inode *inode, struct bio *failed_bio, | |||
| 8022 | "Repair DIO Read Error: submitting new dio read[%#x] to this_mirror=%d, in_validation=%d\n", | 8024 | "Repair DIO Read Error: submitting new dio read[%#x] to this_mirror=%d, in_validation=%d\n", |
| 8023 | read_mode, failrec->this_mirror, failrec->in_validation); | 8025 | read_mode, failrec->this_mirror, failrec->in_validation); |
| 8024 | 8026 | ||
| 8025 | ret = submit_dio_repair_bio(inode, bio, failrec->this_mirror); | 8027 | status = submit_dio_repair_bio(inode, bio, failrec->this_mirror); |
| 8026 | if (ret) { | 8028 | if (status) { |
| 8027 | free_io_failure(failure_tree, io_tree, failrec); | 8029 | free_io_failure(failure_tree, io_tree, failrec); |
| 8028 | bio_put(bio); | 8030 | bio_put(bio); |
| 8029 | } | 8031 | } |
| 8030 | 8032 | ||
| 8031 | return ret; | 8033 | return status; |
| 8032 | } | 8034 | } |
| 8033 | 8035 | ||
| 8034 | struct btrfs_retry_complete { | 8036 | struct btrfs_retry_complete { |
| @@ -8065,8 +8067,8 @@ end: | |||
| 8065 | bio_put(bio); | 8067 | bio_put(bio); |
| 8066 | } | 8068 | } |
| 8067 | 8069 | ||
| 8068 | static int __btrfs_correct_data_nocsum(struct inode *inode, | 8070 | static blk_status_t __btrfs_correct_data_nocsum(struct inode *inode, |
| 8069 | struct btrfs_io_bio *io_bio) | 8071 | struct btrfs_io_bio *io_bio) |
| 8070 | { | 8072 | { |
| 8071 | struct btrfs_fs_info *fs_info; | 8073 | struct btrfs_fs_info *fs_info; |
| 8072 | struct bio_vec bvec; | 8074 | struct bio_vec bvec; |
| @@ -8076,8 +8078,8 @@ static int __btrfs_correct_data_nocsum(struct inode *inode, | |||
| 8076 | unsigned int pgoff; | 8078 | unsigned int pgoff; |
| 8077 | u32 sectorsize; | 8079 | u32 sectorsize; |
| 8078 | int nr_sectors; | 8080 | int nr_sectors; |
| 8079 | int ret; | 8081 | blk_status_t ret; |
| 8080 | int err = 0; | 8082 | blk_status_t err = BLK_STS_OK; |
| 8081 | 8083 | ||
| 8082 | fs_info = BTRFS_I(inode)->root->fs_info; | 8084 | fs_info = BTRFS_I(inode)->root->fs_info; |
| 8083 | sectorsize = fs_info->sectorsize; | 8085 | sectorsize = fs_info->sectorsize; |
| @@ -8183,11 +8185,12 @@ static blk_status_t __btrfs_subio_endio_read(struct inode *inode, | |||
| 8183 | int csum_pos; | 8185 | int csum_pos; |
| 8184 | bool uptodate = (err == 0); | 8186 | bool uptodate = (err == 0); |
| 8185 | int ret; | 8187 | int ret; |
| 8188 | blk_status_t status; | ||
| 8186 | 8189 | ||
| 8187 | fs_info = BTRFS_I(inode)->root->fs_info; | 8190 | fs_info = BTRFS_I(inode)->root->fs_info; |
| 8188 | sectorsize = fs_info->sectorsize; | 8191 | sectorsize = fs_info->sectorsize; |
| 8189 | 8192 | ||
| 8190 | err = 0; | 8193 | err = BLK_STS_OK; |
| 8191 | start = io_bio->logical; | 8194 | start = io_bio->logical; |
| 8192 | done.inode = inode; | 8195 | done.inode = inode; |
| 8193 | io_bio->bio.bi_iter = io_bio->iter; | 8196 | io_bio->bio.bi_iter = io_bio->iter; |
| @@ -8209,12 +8212,12 @@ try_again: | |||
| 8209 | done.start = start; | 8212 | done.start = start; |
| 8210 | init_completion(&done.done); | 8213 | init_completion(&done.done); |
| 8211 | 8214 | ||
| 8212 | ret = dio_read_error(inode, &io_bio->bio, bvec.bv_page, | 8215 | status = dio_read_error(inode, &io_bio->bio, bvec.bv_page, |
| 8213 | pgoff, start, start + sectorsize - 1, | 8216 | pgoff, start, start + sectorsize - 1, |
| 8214 | io_bio->mirror_num, | 8217 | io_bio->mirror_num, btrfs_retry_endio, |
| 8215 | btrfs_retry_endio, &done); | 8218 | &done); |
| 8216 | if (ret) { | 8219 | if (status) { |
| 8217 | err = errno_to_blk_status(ret); | 8220 | err = status; |
| 8218 | goto next; | 8221 | goto next; |
| 8219 | } | 8222 | } |
| 8220 | 8223 | ||
| @@ -8250,7 +8253,7 @@ static blk_status_t btrfs_subio_endio_read(struct inode *inode, | |||
| 8250 | if (unlikely(err)) | 8253 | if (unlikely(err)) |
| 8251 | return __btrfs_correct_data_nocsum(inode, io_bio); | 8254 | return __btrfs_correct_data_nocsum(inode, io_bio); |
| 8252 | else | 8255 | else |
| 8253 | return 0; | 8256 | return BLK_STS_OK; |
| 8254 | } else { | 8257 | } else { |
| 8255 | return __btrfs_subio_endio_read(inode, io_bio, err); | 8258 | return __btrfs_subio_endio_read(inode, io_bio, err); |
| 8256 | } | 8259 | } |
| @@ -8423,9 +8426,9 @@ static inline blk_status_t btrfs_lookup_and_bind_dio_csum(struct inode *inode, | |||
| 8423 | return 0; | 8426 | return 0; |
| 8424 | } | 8427 | } |
| 8425 | 8428 | ||
| 8426 | static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode, | 8429 | static inline blk_status_t |
| 8427 | u64 file_offset, int skip_sum, | 8430 | __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode, u64 file_offset, |
| 8428 | int async_submit) | 8431 | int skip_sum, int async_submit) |
| 8429 | { | 8432 | { |
| 8430 | struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); | 8433 | struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); |
| 8431 | struct btrfs_dio_private *dip = bio->bi_private; | 8434 | struct btrfs_dio_private *dip = bio->bi_private; |
| @@ -8488,6 +8491,7 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip, | |||
| 8488 | int clone_offset = 0; | 8491 | int clone_offset = 0; |
| 8489 | int clone_len; | 8492 | int clone_len; |
| 8490 | int ret; | 8493 | int ret; |
| 8494 | blk_status_t status; | ||
| 8491 | 8495 | ||
| 8492 | map_length = orig_bio->bi_iter.bi_size; | 8496 | map_length = orig_bio->bi_iter.bi_size; |
| 8493 | submit_len = map_length; | 8497 | submit_len = map_length; |
| @@ -8537,9 +8541,9 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip, | |||
| 8537 | */ | 8541 | */ |
| 8538 | atomic_inc(&dip->pending_bios); | 8542 | atomic_inc(&dip->pending_bios); |
| 8539 | 8543 | ||
| 8540 | ret = __btrfs_submit_dio_bio(bio, inode, file_offset, skip_sum, | 8544 | status = __btrfs_submit_dio_bio(bio, inode, file_offset, skip_sum, |
| 8541 | async_submit); | 8545 | async_submit); |
| 8542 | if (ret) { | 8546 | if (status) { |
| 8543 | bio_put(bio); | 8547 | bio_put(bio); |
| 8544 | atomic_dec(&dip->pending_bios); | 8548 | atomic_dec(&dip->pending_bios); |
| 8545 | goto out_err; | 8549 | goto out_err; |
| @@ -8557,9 +8561,9 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip, | |||
| 8557 | } while (submit_len > 0); | 8561 | } while (submit_len > 0); |
| 8558 | 8562 | ||
| 8559 | submit: | 8563 | submit: |
| 8560 | ret = __btrfs_submit_dio_bio(bio, inode, file_offset, skip_sum, | 8564 | status = __btrfs_submit_dio_bio(bio, inode, file_offset, skip_sum, |
| 8561 | async_submit); | 8565 | async_submit); |
| 8562 | if (!ret) | 8566 | if (!status) |
| 8563 | return 0; | 8567 | return 0; |
| 8564 | 8568 | ||
| 8565 | bio_put(bio); | 8569 | bio_put(bio); |
diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c index 208638384cd2..2cf6ba40f7c4 100644 --- a/fs/btrfs/raid56.c +++ b/fs/btrfs/raid56.c | |||
| @@ -905,7 +905,7 @@ static void raid_write_end_io(struct bio *bio) | |||
| 905 | if (!atomic_dec_and_test(&rbio->stripes_pending)) | 905 | if (!atomic_dec_and_test(&rbio->stripes_pending)) |
| 906 | return; | 906 | return; |
| 907 | 907 | ||
| 908 | err = 0; | 908 | err = BLK_STS_OK; |
| 909 | 909 | ||
| 910 | /* OK, we have read all the stripes we need to. */ | 910 | /* OK, we have read all the stripes we need to. */ |
| 911 | max_errors = (rbio->operation == BTRFS_RBIO_PARITY_SCRUB) ? | 911 | max_errors = (rbio->operation == BTRFS_RBIO_PARITY_SCRUB) ? |
| @@ -1324,7 +1324,7 @@ write_data: | |||
| 1324 | return; | 1324 | return; |
| 1325 | 1325 | ||
| 1326 | cleanup: | 1326 | cleanup: |
| 1327 | rbio_orig_end_io(rbio, -EIO); | 1327 | rbio_orig_end_io(rbio, BLK_STS_IOERR); |
| 1328 | } | 1328 | } |
| 1329 | 1329 | ||
| 1330 | /* | 1330 | /* |
| @@ -1475,7 +1475,7 @@ static void raid_rmw_end_io(struct bio *bio) | |||
| 1475 | 1475 | ||
| 1476 | cleanup: | 1476 | cleanup: |
| 1477 | 1477 | ||
| 1478 | rbio_orig_end_io(rbio, -EIO); | 1478 | rbio_orig_end_io(rbio, BLK_STS_IOERR); |
| 1479 | } | 1479 | } |
| 1480 | 1480 | ||
| 1481 | static void async_rmw_stripe(struct btrfs_raid_bio *rbio) | 1481 | static void async_rmw_stripe(struct btrfs_raid_bio *rbio) |
| @@ -1579,7 +1579,7 @@ static int raid56_rmw_stripe(struct btrfs_raid_bio *rbio) | |||
| 1579 | return 0; | 1579 | return 0; |
| 1580 | 1580 | ||
| 1581 | cleanup: | 1581 | cleanup: |
| 1582 | rbio_orig_end_io(rbio, -EIO); | 1582 | rbio_orig_end_io(rbio, BLK_STS_IOERR); |
| 1583 | return -EIO; | 1583 | return -EIO; |
| 1584 | 1584 | ||
| 1585 | finish: | 1585 | finish: |
| @@ -1795,12 +1795,12 @@ static void __raid_recover_end_io(struct btrfs_raid_bio *rbio) | |||
| 1795 | void **pointers; | 1795 | void **pointers; |
| 1796 | int faila = -1, failb = -1; | 1796 | int faila = -1, failb = -1; |
| 1797 | struct page *page; | 1797 | struct page *page; |
| 1798 | int err; | 1798 | blk_status_t err; |
| 1799 | int i; | 1799 | int i; |
| 1800 | 1800 | ||
| 1801 | pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS); | 1801 | pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS); |
| 1802 | if (!pointers) { | 1802 | if (!pointers) { |
| 1803 | err = -ENOMEM; | 1803 | err = BLK_STS_RESOURCE; |
| 1804 | goto cleanup_io; | 1804 | goto cleanup_io; |
| 1805 | } | 1805 | } |
| 1806 | 1806 | ||
| @@ -1856,7 +1856,7 @@ static void __raid_recover_end_io(struct btrfs_raid_bio *rbio) | |||
| 1856 | * a bad data or Q stripe. | 1856 | * a bad data or Q stripe. |
| 1857 | * TODO, we should redo the xor here. | 1857 | * TODO, we should redo the xor here. |
| 1858 | */ | 1858 | */ |
| 1859 | err = -EIO; | 1859 | err = BLK_STS_IOERR; |
| 1860 | goto cleanup; | 1860 | goto cleanup; |
| 1861 | } | 1861 | } |
| 1862 | /* | 1862 | /* |
| @@ -1882,7 +1882,7 @@ static void __raid_recover_end_io(struct btrfs_raid_bio *rbio) | |||
| 1882 | if (rbio->bbio->raid_map[failb] == RAID6_Q_STRIPE) { | 1882 | if (rbio->bbio->raid_map[failb] == RAID6_Q_STRIPE) { |
| 1883 | if (rbio->bbio->raid_map[faila] == | 1883 | if (rbio->bbio->raid_map[faila] == |
| 1884 | RAID5_P_STRIPE) { | 1884 | RAID5_P_STRIPE) { |
| 1885 | err = -EIO; | 1885 | err = BLK_STS_IOERR; |
| 1886 | goto cleanup; | 1886 | goto cleanup; |
| 1887 | } | 1887 | } |
| 1888 | /* | 1888 | /* |
| @@ -1954,13 +1954,13 @@ pstripe: | |||
| 1954 | } | 1954 | } |
| 1955 | } | 1955 | } |
| 1956 | 1956 | ||
| 1957 | err = 0; | 1957 | err = BLK_STS_OK; |
| 1958 | cleanup: | 1958 | cleanup: |
| 1959 | kfree(pointers); | 1959 | kfree(pointers); |
| 1960 | 1960 | ||
| 1961 | cleanup_io: | 1961 | cleanup_io: |
| 1962 | if (rbio->operation == BTRFS_RBIO_READ_REBUILD) { | 1962 | if (rbio->operation == BTRFS_RBIO_READ_REBUILD) { |
| 1963 | if (err == 0) | 1963 | if (err == BLK_STS_OK) |
| 1964 | cache_rbio_pages(rbio); | 1964 | cache_rbio_pages(rbio); |
| 1965 | else | 1965 | else |
| 1966 | clear_bit(RBIO_CACHE_READY_BIT, &rbio->flags); | 1966 | clear_bit(RBIO_CACHE_READY_BIT, &rbio->flags); |
| @@ -1968,7 +1968,7 @@ cleanup_io: | |||
| 1968 | rbio_orig_end_io(rbio, err); | 1968 | rbio_orig_end_io(rbio, err); |
| 1969 | } else if (rbio->operation == BTRFS_RBIO_REBUILD_MISSING) { | 1969 | } else if (rbio->operation == BTRFS_RBIO_REBUILD_MISSING) { |
| 1970 | rbio_orig_end_io(rbio, err); | 1970 | rbio_orig_end_io(rbio, err); |
| 1971 | } else if (err == 0) { | 1971 | } else if (err == BLK_STS_OK) { |
| 1972 | rbio->faila = -1; | 1972 | rbio->faila = -1; |
| 1973 | rbio->failb = -1; | 1973 | rbio->failb = -1; |
| 1974 | 1974 | ||
| @@ -2005,7 +2005,7 @@ static void raid_recover_end_io(struct bio *bio) | |||
| 2005 | return; | 2005 | return; |
| 2006 | 2006 | ||
| 2007 | if (atomic_read(&rbio->error) > rbio->bbio->max_errors) | 2007 | if (atomic_read(&rbio->error) > rbio->bbio->max_errors) |
| 2008 | rbio_orig_end_io(rbio, -EIO); | 2008 | rbio_orig_end_io(rbio, BLK_STS_IOERR); |
| 2009 | else | 2009 | else |
| 2010 | __raid_recover_end_io(rbio); | 2010 | __raid_recover_end_io(rbio); |
| 2011 | } | 2011 | } |
| @@ -2104,7 +2104,7 @@ out: | |||
| 2104 | cleanup: | 2104 | cleanup: |
| 2105 | if (rbio->operation == BTRFS_RBIO_READ_REBUILD || | 2105 | if (rbio->operation == BTRFS_RBIO_READ_REBUILD || |
| 2106 | rbio->operation == BTRFS_RBIO_REBUILD_MISSING) | 2106 | rbio->operation == BTRFS_RBIO_REBUILD_MISSING) |
| 2107 | rbio_orig_end_io(rbio, -EIO); | 2107 | rbio_orig_end_io(rbio, BLK_STS_IOERR); |
| 2108 | return -EIO; | 2108 | return -EIO; |
| 2109 | } | 2109 | } |
| 2110 | 2110 | ||
| @@ -2431,7 +2431,7 @@ submit_write: | |||
| 2431 | nr_data = bio_list_size(&bio_list); | 2431 | nr_data = bio_list_size(&bio_list); |
| 2432 | if (!nr_data) { | 2432 | if (!nr_data) { |
| 2433 | /* Every parity is right */ | 2433 | /* Every parity is right */ |
| 2434 | rbio_orig_end_io(rbio, 0); | 2434 | rbio_orig_end_io(rbio, BLK_STS_OK); |
| 2435 | return; | 2435 | return; |
| 2436 | } | 2436 | } |
| 2437 | 2437 | ||
| @@ -2451,7 +2451,7 @@ submit_write: | |||
| 2451 | return; | 2451 | return; |
| 2452 | 2452 | ||
| 2453 | cleanup: | 2453 | cleanup: |
| 2454 | rbio_orig_end_io(rbio, -EIO); | 2454 | rbio_orig_end_io(rbio, BLK_STS_IOERR); |
| 2455 | } | 2455 | } |
| 2456 | 2456 | ||
| 2457 | static inline int is_data_stripe(struct btrfs_raid_bio *rbio, int stripe) | 2457 | static inline int is_data_stripe(struct btrfs_raid_bio *rbio, int stripe) |
| @@ -2519,7 +2519,7 @@ static void validate_rbio_for_parity_scrub(struct btrfs_raid_bio *rbio) | |||
| 2519 | return; | 2519 | return; |
| 2520 | 2520 | ||
| 2521 | cleanup: | 2521 | cleanup: |
| 2522 | rbio_orig_end_io(rbio, -EIO); | 2522 | rbio_orig_end_io(rbio, BLK_STS_IOERR); |
| 2523 | } | 2523 | } |
| 2524 | 2524 | ||
| 2525 | /* | 2525 | /* |
| @@ -2633,7 +2633,7 @@ static void raid56_parity_scrub_stripe(struct btrfs_raid_bio *rbio) | |||
| 2633 | return; | 2633 | return; |
| 2634 | 2634 | ||
| 2635 | cleanup: | 2635 | cleanup: |
| 2636 | rbio_orig_end_io(rbio, -EIO); | 2636 | rbio_orig_end_io(rbio, BLK_STS_IOERR); |
| 2637 | return; | 2637 | return; |
| 2638 | 2638 | ||
| 2639 | finish: | 2639 | finish: |
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index e8b9a269fdde..bd679bc7a1a9 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
| @@ -6212,8 +6212,8 @@ static void bbio_error(struct btrfs_bio *bbio, struct bio *bio, u64 logical) | |||
| 6212 | } | 6212 | } |
| 6213 | } | 6213 | } |
| 6214 | 6214 | ||
| 6215 | int btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, | 6215 | blk_status_t btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, |
| 6216 | int mirror_num, int async_submit) | 6216 | int mirror_num, int async_submit) |
| 6217 | { | 6217 | { |
| 6218 | struct btrfs_device *dev; | 6218 | struct btrfs_device *dev; |
| 6219 | struct bio *first_bio = bio; | 6219 | struct bio *first_bio = bio; |
| @@ -6233,7 +6233,7 @@ int btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, | |||
| 6233 | &map_length, &bbio, mirror_num, 1); | 6233 | &map_length, &bbio, mirror_num, 1); |
| 6234 | if (ret) { | 6234 | if (ret) { |
| 6235 | btrfs_bio_counter_dec(fs_info); | 6235 | btrfs_bio_counter_dec(fs_info); |
| 6236 | return ret; | 6236 | return errno_to_blk_status(ret); |
| 6237 | } | 6237 | } |
| 6238 | 6238 | ||
| 6239 | total_devs = bbio->num_stripes; | 6239 | total_devs = bbio->num_stripes; |
| @@ -6256,7 +6256,7 @@ int btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, | |||
| 6256 | } | 6256 | } |
| 6257 | 6257 | ||
| 6258 | btrfs_bio_counter_dec(fs_info); | 6258 | btrfs_bio_counter_dec(fs_info); |
| 6259 | return ret; | 6259 | return errno_to_blk_status(ret); |
| 6260 | } | 6260 | } |
| 6261 | 6261 | ||
| 6262 | if (map_length < length) { | 6262 | if (map_length < length) { |
| @@ -6283,7 +6283,7 @@ int btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, | |||
| 6283 | dev_nr, async_submit); | 6283 | dev_nr, async_submit); |
| 6284 | } | 6284 | } |
| 6285 | btrfs_bio_counter_dec(fs_info); | 6285 | btrfs_bio_counter_dec(fs_info); |
| 6286 | return 0; | 6286 | return BLK_STS_OK; |
| 6287 | } | 6287 | } |
| 6288 | 6288 | ||
| 6289 | struct btrfs_device *btrfs_find_device(struct btrfs_fs_info *fs_info, u64 devid, | 6289 | struct btrfs_device *btrfs_find_device(struct btrfs_fs_info *fs_info, u64 devid, |
diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h index 6f45fd60d15a..93277fc60930 100644 --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h | |||
| @@ -74,7 +74,7 @@ struct btrfs_device { | |||
| 74 | int missing; | 74 | int missing; |
| 75 | int can_discard; | 75 | int can_discard; |
| 76 | int is_tgtdev_for_dev_replace; | 76 | int is_tgtdev_for_dev_replace; |
| 77 | int last_flush_error; | 77 | blk_status_t last_flush_error; |
| 78 | int flush_bio_sent; | 78 | int flush_bio_sent; |
| 79 | 79 | ||
| 80 | #ifdef __BTRFS_NEED_DEVICE_DATA_ORDERED | 80 | #ifdef __BTRFS_NEED_DEVICE_DATA_ORDERED |
| @@ -416,8 +416,8 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans, | |||
| 416 | struct btrfs_fs_info *fs_info, u64 type); | 416 | struct btrfs_fs_info *fs_info, u64 type); |
| 417 | void btrfs_mapping_init(struct btrfs_mapping_tree *tree); | 417 | void btrfs_mapping_init(struct btrfs_mapping_tree *tree); |
| 418 | void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree); | 418 | void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree); |
| 419 | int btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, | 419 | blk_status_t btrfs_map_bio(struct btrfs_fs_info *fs_info, struct bio *bio, |
| 420 | int mirror_num, int async_submit); | 420 | int mirror_num, int async_submit); |
| 421 | int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, | 421 | int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, |
| 422 | fmode_t flags, void *holder); | 422 | fmode_t flags, void *holder); |
| 423 | int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, | 423 | int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, |
