What __readahead_hook() need exactly is fs_info, no need to convert
fs_info to root in caller and convert back in __readahead_hook()

Signed-off-by: Zhao Lei <zhao...@cn.fujitsu.com>
---
 fs/btrfs/ctree.h   |  4 ++--
 fs/btrfs/disk-io.c | 22 +++++++++++-----------
 fs/btrfs/reada.c   | 23 +++++++++++------------
 3 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 54e7b0d..0912f89 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -4358,8 +4358,8 @@ struct reada_control *btrfs_reada_add(struct btrfs_root 
*root,
                              struct btrfs_key *start, struct btrfs_key *end);
 int btrfs_reada_wait(void *handle);
 void btrfs_reada_detach(void *handle);
-int btree_readahead_hook(struct btrfs_root *root, struct extent_buffer *eb,
-                        u64 start, int err);
+int btree_readahead_hook(struct btrfs_fs_info *fs_info,
+                        struct extent_buffer *eb, u64 start, int err);
 
 static inline int is_fstree(u64 rootid)
 {
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 974be09..9d120e4 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -604,6 +604,7 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio 
*io_bio,
        int found_level;
        struct extent_buffer *eb;
        struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
+       struct btrfs_fs_info *fs_info = root->fs_info;
        int ret = 0;
        int reads_done;
 
@@ -629,21 +630,21 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio 
*io_bio,
 
        found_start = btrfs_header_bytenr(eb);
        if (found_start != eb->start) {
-               btrfs_err_rl(eb->fs_info, "bad tree block start %llu %llu",
-                              found_start, eb->start);
+               btrfs_err_rl(fs_info, "bad tree block start %llu %llu",
+                            found_start, eb->start);
                ret = -EIO;
                goto err;
        }
-       if (check_tree_block_fsid(root->fs_info, eb)) {
-               btrfs_err_rl(eb->fs_info, "bad fsid on block %llu",
-                              eb->start);
+       if (check_tree_block_fsid(fs_info, eb)) {
+               btrfs_err_rl(fs_info, "bad fsid on block %llu",
+                            eb->start);
                ret = -EIO;
                goto err;
        }
        found_level = btrfs_header_level(eb);
        if (found_level >= BTRFS_MAX_LEVEL) {
-               btrfs_err(root->fs_info, "bad tree block level %d",
-                          (int)btrfs_header_level(eb));
+               btrfs_err(fs_info, "bad tree block level %d",
+                         (int)btrfs_header_level(eb));
                ret = -EIO;
                goto err;
        }
@@ -651,7 +652,7 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio 
*io_bio,
        btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb),
                                       eb, found_level);
 
-       ret = csum_tree_block(root->fs_info, eb, 1);
+       ret = csum_tree_block(fs_info, eb, 1);
        if (ret) {
                ret = -EIO;
                goto err;
@@ -672,7 +673,7 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio 
*io_bio,
 err:
        if (reads_done &&
            test_and_clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags))
-               btree_readahead_hook(root, eb, eb->start, ret);
+               btree_readahead_hook(fs_info, eb, eb->start, ret);
 
        if (ret) {
                /*
@@ -691,14 +692,13 @@ out:
 static int btree_io_failed_hook(struct page *page, int failed_mirror)
 {
        struct extent_buffer *eb;
-       struct btrfs_root *root = BTRFS_I(page->mapping->host)->root;
 
        eb = (struct extent_buffer *)page->private;
        set_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags);
        eb->read_mirror = failed_mirror;
        atomic_dec(&eb->io_pages);
        if (test_and_clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags))
-               btree_readahead_hook(root, eb, eb->start, -EIO);
+               btree_readahead_hook(eb->fs_info, eb, eb->start, -EIO);
        return -EIO;    /* we fixed nothing */
 }
 
diff --git a/fs/btrfs/reada.c b/fs/btrfs/reada.c
index 7668066..869bb1c 100644
--- a/fs/btrfs/reada.c
+++ b/fs/btrfs/reada.c
@@ -105,15 +105,15 @@ static int reada_add_block(struct reada_control *rc, u64 
logical,
 
 /* recurses */
 /* in case of err, eb might be NULL */
-static void __readahead_hook(struct btrfs_root *root, struct reada_extent *re,
-                            struct extent_buffer *eb, u64 start, int err)
+static void __readahead_hook(struct btrfs_fs_info *fs_info,
+                            struct reada_extent *re, struct extent_buffer *eb,
+                            u64 start, int err)
 {
        int level = 0;
        int nritems;
        int i;
        u64 bytenr;
        u64 generation;
-       struct btrfs_fs_info *fs_info = root->fs_info;
        struct list_head list;
        struct btrfs_device *for_dev;
 
@@ -176,10 +176,10 @@ static void __readahead_hook(struct btrfs_root *root, 
struct reada_extent *re,
                         */
 #ifdef DEBUG
                        if (rec->generation != generation) {
-                               btrfs_debug(root->fs_info,
-                                          "generation mismatch for 
(%llu,%d,%llu) %llu != %llu",
-                                      key.objectid, key.type, key.offset,
-                                      rec->generation, generation);
+                               btrfs_debug(fs_info,
+                                           "generation mismatch for 
(%llu,%d,%llu) %llu != %llu",
+                                           key.objectid, key.type, key.offset,
+                                           rec->generation, generation);
                        }
 #endif
                        if (rec->generation == generation &&
@@ -220,12 +220,11 @@ static void __readahead_hook(struct btrfs_root *root, 
struct reada_extent *re,
  * start is passed separately in case eb in NULL, which may be the case with
  * failed I/O
  */
-int btree_readahead_hook(struct btrfs_root *root, struct extent_buffer *eb,
-                        u64 start, int err)
+int btree_readahead_hook(struct btrfs_fs_info *fs_info,
+                        struct extent_buffer *eb, u64 start, int err)
 {
        int ret = 0;
        struct reada_extent *re;
-       struct btrfs_fs_info *fs_info = root->fs_info;
 
        /* find extent */
        spin_lock(&fs_info->reada_lock);
@@ -729,9 +728,9 @@ static int reada_start_machine_dev(struct btrfs_fs_info 
*fs_info,
        ret = reada_tree_block_flagged(fs_info->extent_root, logical,
                        mirror_num, &eb);
        if (ret)
-               __readahead_hook(fs_info->extent_root, re, NULL, logical, ret);
+               __readahead_hook(fs_info, re, NULL, logical, ret);
        else if (eb)
-               __readahead_hook(fs_info->extent_root, re, eb, eb->start, ret);
+               __readahead_hook(fs_info, re, eb, eb->start, ret);
 
        if (eb)
                free_extent_buffer(eb);
-- 
1.8.5.1



--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to