btrfs: make clean_io_failure take btrfs_inode
authorNikolay Borisov <nborisov@suse.com>
Mon, 20 Feb 2017 11:50:56 +0000 (13:50 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 28 Feb 2017 10:30:10 +0000 (11:30 +0100)
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c
fs/btrfs/extent_io.h
fs/btrfs/inode.c

index e99e8dad3cc7a43313a2dc1fd683ab0bb925b425..b08fa96678eeca3c485674b2080288c27672756f 100644 (file)
@@ -2090,23 +2090,23 @@ int repair_eb_io_failure(struct btrfs_fs_info *fs_info,
  * each time an IO finishes, we do a fast check in the IO failure tree
  * to see if we need to process or clean up an io_failure_record
  */
-int clean_io_failure(struct inode *inode, u64 start, struct page *page,
+int clean_io_failure(struct btrfs_inode *inode, u64 start, struct page *page,
                     unsigned int pg_offset)
 {
        u64 private;
        struct io_failure_record *failrec;
-       struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
+       struct btrfs_fs_info *fs_info = inode->root->fs_info;
        struct extent_state *state;
        int num_copies;
        int ret;
 
        private = 0;
-       ret = count_range_bits(&BTRFS_I(inode)->io_failure_tree, &private,
+       ret = count_range_bits(&inode->io_failure_tree, &private,
                                (u64)-1, 1, EXTENT_DIRTY, 0);
        if (!ret)
                return 0;
 
-       ret = get_state_failrec(&BTRFS_I(inode)->io_failure_tree, start,
+       ret = get_state_failrec(&inode->io_failure_tree, start,
                        &failrec);
        if (ret)
                return 0;
@@ -2123,25 +2123,25 @@ int clean_io_failure(struct inode *inode, u64 start, struct page *page,
        if (fs_info->sb->s_flags & MS_RDONLY)
                goto out;
 
-       spin_lock(&BTRFS_I(inode)->io_tree.lock);
-       state = find_first_extent_bit_state(&BTRFS_I(inode)->io_tree,
+       spin_lock(&inode->io_tree.lock);
+       state = find_first_extent_bit_state(&inode->io_tree,
                                            failrec->start,
                                            EXTENT_LOCKED);
-       spin_unlock(&BTRFS_I(inode)->io_tree.lock);
+       spin_unlock(&inode->io_tree.lock);
 
        if (state && state->start <= failrec->start &&
            state->end >= failrec->start + failrec->len - 1) {
                num_copies = btrfs_num_copies(fs_info, failrec->logical,
                                              failrec->len);
                if (num_copies > 1)  {
-                       repair_io_failure(BTRFS_I(inode), start, failrec->len,
+                       repair_io_failure(inode, start, failrec->len,
                                          failrec->logical, page,
                                          pg_offset, failrec->failed_mirror);
                }
        }
 
 out:
-       free_io_failure(BTRFS_I(inode), failrec);
+       free_io_failure(inode, failrec);
 
        return 0;
 }
@@ -2577,7 +2577,8 @@ static void end_bio_extent_readpage(struct bio *bio)
                        if (ret)
                                uptodate = 0;
                        else
-                               clean_io_failure(inode, start, page, 0);
+                               clean_io_failure(BTRFS_I(inode), start,
+                                               page, 0);
                }
 
                if (likely(uptodate))
index 039a6daa392bd244f56ab760b73ec30422686817..0f67222f4464311ac39ec33bb67359c1a3ef98de 100644 (file)
@@ -456,8 +456,8 @@ struct btrfs_inode;
 int repair_io_failure(struct btrfs_inode *inode, u64 start, u64 length,
                u64 logical, struct page *page,
                unsigned int pg_offset, int mirror_num);
-int clean_io_failure(struct inode *inode, u64 start, struct page *page,
-                    unsigned int pg_offset);
+int clean_io_failure(struct btrfs_inode *inode, u64 start,
+               struct page *page, unsigned int pg_offset);
 void end_extent_writepage(struct page *page, int err, u64 start, u64 end);
 int repair_eb_io_failure(struct btrfs_fs_info *fs_info,
                         struct extent_buffer *eb, int mirror_num);
index fc00117a0dd0661d6815a9fcc97ccf1dcc2f4213..4498921bb6085eb5db906209a4c9a8bf1534e1a9 100644 (file)
@@ -7914,7 +7914,7 @@ static void btrfs_retry_endio_nocsum(struct bio *bio)
 
        done->uptodate = 1;
        bio_for_each_segment_all(bvec, bio, i)
-               clean_io_failure(done->inode, done->start, bvec->bv_page, 0);
+       clean_io_failure(BTRFS_I(done->inode), done->start, bvec->bv_page, 0);
 end:
        complete(&done->done);
        bio_put(bio);
@@ -8000,7 +8000,7 @@ static void btrfs_retry_endio(struct bio *bio)
                                        bvec->bv_page, bvec->bv_offset,
                                        done->start, bvec->bv_len);
                if (!ret)
-                       clean_io_failure(done->inode, done->start,
+                       clean_io_failure(BTRFS_I(done->inode), done->start,
                                        bvec->bv_page, bvec->bv_offset);
                else
                        uptodate = 0;