aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolay Borisov <nborisov@suse.com>2017-02-20 06:50:55 -0500
committerDavid Sterba <dsterba@suse.com>2017-02-28 05:30:09 -0500
commit9d4f7f8ad69112137da0bbe4036b94739ae25f78 (patch)
tree28151f87f499edb0d68907fc0d37136910324d2c
parentf898ac6ae339782bc304b2b15c9e187e438da9f7 (diff)
btrfs: make repair_io_failure take btrfs_inode
Signed-off-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--fs/btrfs/extent_io.c13
-rw-r--r--fs/btrfs/extent_io.h8
-rw-r--r--fs/btrfs/scrub.c2
3 files changed, 12 insertions, 11 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 0e73e48a9c4c..e99e8dad3cc7 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -1992,10 +1992,11 @@ int free_io_failure(struct btrfs_inode *inode, struct io_failure_record *rec)
1992 * currently, there can be no more than two copies of every data bit. thus, 1992 * currently, there can be no more than two copies of every data bit. thus,
1993 * exactly one rewrite is required. 1993 * exactly one rewrite is required.
1994 */ 1994 */
1995int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical, 1995int repair_io_failure(struct btrfs_inode *inode, u64 start, u64 length,
1996 struct page *page, unsigned int pg_offset, int mirror_num) 1996 u64 logical, struct page *page,
1997 unsigned int pg_offset, int mirror_num)
1997{ 1998{
1998 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info; 1999 struct btrfs_fs_info *fs_info = inode->root->fs_info;
1999 struct bio *bio; 2000 struct bio *bio;
2000 struct btrfs_device *dev; 2001 struct btrfs_device *dev;
2001 u64 map_length = 0; 2002 u64 map_length = 0;
@@ -2054,7 +2055,7 @@ int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical,
2054 2055
2055 btrfs_info_rl_in_rcu(fs_info, 2056 btrfs_info_rl_in_rcu(fs_info,
2056 "read error corrected: ino %llu off %llu (dev %s sector %llu)", 2057 "read error corrected: ino %llu off %llu (dev %s sector %llu)",
2057 btrfs_ino(BTRFS_I(inode)), start, 2058 btrfs_ino(inode), start,
2058 rcu_str_deref(dev->name), sector); 2059 rcu_str_deref(dev->name), sector);
2059 btrfs_bio_counter_dec(fs_info); 2060 btrfs_bio_counter_dec(fs_info);
2060 bio_put(bio); 2061 bio_put(bio);
@@ -2074,7 +2075,7 @@ int repair_eb_io_failure(struct btrfs_fs_info *fs_info,
2074 for (i = 0; i < num_pages; i++) { 2075 for (i = 0; i < num_pages; i++) {
2075 struct page *p = eb->pages[i]; 2076 struct page *p = eb->pages[i];
2076 2077
2077 ret = repair_io_failure(fs_info->btree_inode, start, 2078 ret = repair_io_failure(BTRFS_I(fs_info->btree_inode), start,
2078 PAGE_SIZE, start, p, 2079 PAGE_SIZE, start, p,
2079 start - page_offset(p), mirror_num); 2080 start - page_offset(p), mirror_num);
2080 if (ret) 2081 if (ret)
@@ -2133,7 +2134,7 @@ int clean_io_failure(struct inode *inode, u64 start, struct page *page,
2133 num_copies = btrfs_num_copies(fs_info, failrec->logical, 2134 num_copies = btrfs_num_copies(fs_info, failrec->logical,
2134 failrec->len); 2135 failrec->len);
2135 if (num_copies > 1) { 2136 if (num_copies > 1) {
2136 repair_io_failure(inode, start, failrec->len, 2137 repair_io_failure(BTRFS_I(inode), start, failrec->len,
2137 failrec->logical, page, 2138 failrec->logical, page,
2138 pg_offset, failrec->failed_mirror); 2139 pg_offset, failrec->failed_mirror);
2139 } 2140 }
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 5b4132a9093a..039a6daa392b 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -451,10 +451,11 @@ struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs);
451struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask); 451struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask);
452 452
453struct btrfs_fs_info; 453struct btrfs_fs_info;
454struct btrfs_inode;
454 455
455int repair_io_failure(struct inode *inode, u64 start, u64 length, u64 logical, 456int repair_io_failure(struct btrfs_inode *inode, u64 start, u64 length,
456 struct page *page, unsigned int pg_offset, 457 u64 logical, struct page *page,
457 int mirror_num); 458 unsigned int pg_offset, int mirror_num);
458int clean_io_failure(struct inode *inode, u64 start, struct page *page, 459int clean_io_failure(struct inode *inode, u64 start, struct page *page,
459 unsigned int pg_offset); 460 unsigned int pg_offset);
460void end_extent_writepage(struct page *page, int err, u64 start, u64 end); 461void end_extent_writepage(struct page *page, int err, u64 start, u64 end);
@@ -480,7 +481,6 @@ struct io_failure_record {
480 int in_validation; 481 int in_validation;
481}; 482};
482 483
483struct btrfs_inode;
484 484
485void btrfs_free_io_failure_record(struct inode *inode, u64 start, u64 end); 485void btrfs_free_io_failure_record(struct inode *inode, u64 start, u64 end);
486int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end, 486int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end,
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 82d873406aa3..bdf58b0eaef8 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -731,7 +731,7 @@ static int scrub_fixup_readpage(u64 inum, u64 offset, u64 root, void *fixup_ctx)
731 ret = -EIO; 731 ret = -EIO;
732 goto out; 732 goto out;
733 } 733 }
734 ret = repair_io_failure(inode, offset, PAGE_SIZE, 734 ret = repair_io_failure(BTRFS_I(inode), offset, PAGE_SIZE,
735 fixup->logical, page, 735 fixup->logical, page,
736 offset - page_offset(page), 736 offset - page_offset(page),
737 fixup->mirror_num); 737 fixup->mirror_num);