btrfs: remove unused parameter fs_info from from tree_advance
[sfrench/cifs-2.6.git] / fs / btrfs / ctree.c
index 324df36d28bf7d8da2b7f66186819a6e0a92968f..c4ae9cfea7095e6170cce30cec5e17e1e1f2f627 100644 (file)
@@ -21,11 +21,9 @@ static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root *root,
                      const struct btrfs_key *ins_key, struct btrfs_path *path,
                      int data_size, int extend);
 static int push_node_left(struct btrfs_trans_handle *trans,
-                         struct btrfs_fs_info *fs_info,
                          struct extent_buffer *dst,
                          struct extent_buffer *src, int empty);
 static int balance_node_right(struct btrfs_trans_handle *trans,
-                             struct btrfs_fs_info *fs_info,
                              struct extent_buffer *dst_buf,
                              struct extent_buffer *src_buf);
 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path,
@@ -726,11 +724,11 @@ tree_mod_log_search(struct btrfs_fs_info *fs_info, u64 start, u64 min_seq)
        return __tree_mod_log_search(fs_info, start, min_seq, 0);
 }
 
-static noinline int
-tree_mod_log_eb_copy(struct btrfs_fs_info *fs_info, struct extent_buffer *dst,
+static noinline int tree_mod_log_eb_copy(struct extent_buffer *dst,
                     struct extent_buffer *src, unsigned long dst_offset,
                     unsigned long src_offset, int nr_items)
 {
+       struct btrfs_fs_info *fs_info = dst->fs_info;
        int ret = 0;
        struct tree_mod_elem **tm_list = NULL;
        struct tree_mod_elem **tm_list_add, **tm_list_rem;
@@ -970,7 +968,7 @@ static noinline int update_ref_for_cow(struct btrfs_trans_handle *trans,
                        if (ret)
                                return ret;
                }
-               clean_tree_block(fs_info, buf);
+               btrfs_clean_tree_block(buf);
                *last_ref = 1;
        }
        return 0;
@@ -1792,9 +1790,8 @@ static void root_sub_used(struct btrfs_root *root, u32 size)
 /* given a node and slot number, this reads the blocks it points to.  The
  * extent buffer is returned with a reference taken (but unlocked).
  */
-static noinline struct extent_buffer *
-read_node_slot(struct btrfs_fs_info *fs_info, struct extent_buffer *parent,
-              int slot)
+static noinline struct extent_buffer *read_node_slot(
+                               struct extent_buffer *parent, int slot)
 {
        int level = btrfs_header_level(parent);
        struct extent_buffer *eb;
@@ -1806,7 +1803,7 @@ read_node_slot(struct btrfs_fs_info *fs_info, struct extent_buffer *parent,
        BUG_ON(level == 0);
 
        btrfs_node_key_to_cpu(parent, &first_key, slot);
-       eb = read_tree_block(fs_info, btrfs_node_blockptr(parent, slot),
+       eb = read_tree_block(parent->fs_info, btrfs_node_blockptr(parent, slot),
                             btrfs_node_ptr_generation(parent, slot),
                             level - 1, &first_key);
        if (!IS_ERR(eb) && !extent_buffer_uptodate(eb)) {
@@ -1863,7 +1860,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
                        return 0;
 
                /* promote the child to a root */
-               child = read_node_slot(fs_info, mid, 0);
+               child = read_node_slot(mid, 0);
                if (IS_ERR(child)) {
                        ret = PTR_ERR(child);
                        btrfs_handle_fs_error(fs_info, ret, NULL);
@@ -1888,7 +1885,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
 
                path->locks[level] = 0;
                path->nodes[level] = NULL;
-               clean_tree_block(fs_info, mid);
+               btrfs_clean_tree_block(mid);
                btrfs_tree_unlock(mid);
                /* once for the path */
                free_extent_buffer(mid);
@@ -1903,7 +1900,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
            BTRFS_NODEPTRS_PER_BLOCK(fs_info) / 4)
                return 0;
 
-       left = read_node_slot(fs_info, parent, pslot - 1);
+       left = read_node_slot(parent, pslot - 1);
        if (IS_ERR(left))
                left = NULL;
 
@@ -1918,7 +1915,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
                }
        }
 
-       right = read_node_slot(fs_info, parent, pslot + 1);
+       right = read_node_slot(parent, pslot + 1);
        if (IS_ERR(right))
                right = NULL;
 
@@ -1936,7 +1933,7 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
        /* first, try to make some room in the middle buffer */
        if (left) {
                orig_slot += btrfs_header_nritems(left);
-               wret = push_node_left(trans, fs_info, left, mid, 1);
+               wret = push_node_left(trans, left, mid, 1);
                if (wret < 0)
                        ret = wret;
        }
@@ -1945,11 +1942,11 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
         * then try to empty the right most buffer into the middle
         */
        if (right) {
-               wret = push_node_left(trans, fs_info, mid, right, 1);
+               wret = push_node_left(trans, mid, right, 1);
                if (wret < 0 && wret != -ENOSPC)
                        ret = wret;
                if (btrfs_header_nritems(right) == 0) {
-                       clean_tree_block(fs_info, right);
+                       btrfs_clean_tree_block(right);
                        btrfs_tree_unlock(right);
                        del_ptr(root, path, level + 1, pslot + 1);
                        root_sub_used(root, right->len);
@@ -1981,20 +1978,20 @@ static noinline int balance_level(struct btrfs_trans_handle *trans,
                        btrfs_handle_fs_error(fs_info, ret, NULL);
                        goto enospc;
                }
-               wret = balance_node_right(trans, fs_info, mid, left);
+               wret = balance_node_right(trans, mid, left);
                if (wret < 0) {
                        ret = wret;
                        goto enospc;
                }
                if (wret == 1) {
-                       wret = push_node_left(trans, fs_info, left, mid, 1);
+                       wret = push_node_left(trans, left, mid, 1);
                        if (wret < 0)
                                ret = wret;
                }
                BUG_ON(wret == 1);
        }
        if (btrfs_header_nritems(mid) == 0) {
-               clean_tree_block(fs_info, mid);
+               btrfs_clean_tree_block(mid);
                btrfs_tree_unlock(mid);
                del_ptr(root, path, level + 1, pslot);
                root_sub_used(root, mid->len);
@@ -2078,7 +2075,7 @@ static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans,
        if (!parent)
                return 1;
 
-       left = read_node_slot(fs_info, parent, pslot - 1);
+       left = read_node_slot(parent, pslot - 1);
        if (IS_ERR(left))
                left = NULL;
 
@@ -2098,8 +2095,7 @@ static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans,
                        if (ret)
                                wret = 1;
                        else {
-                               wret = push_node_left(trans, fs_info,
-                                                     left, mid, 0);
+                               wret = push_node_left(trans, left, mid, 0);
                        }
                }
                if (wret < 0)
@@ -2131,7 +2127,7 @@ static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans,
                btrfs_tree_unlock(left);
                free_extent_buffer(left);
        }
-       right = read_node_slot(fs_info, parent, pslot + 1);
+       right = read_node_slot(parent, pslot + 1);
        if (IS_ERR(right))
                right = NULL;
 
@@ -2154,8 +2150,7 @@ static noinline int push_nodes_for_insert(struct btrfs_trans_handle *trans,
                        if (ret)
                                wret = 1;
                        else {
-                               wret = balance_node_right(trans, fs_info,
-                                                         right, mid);
+                               wret = balance_node_right(trans, right, mid);
                        }
                }
                if (wret < 0)
@@ -2416,6 +2411,16 @@ read_block_for_search(struct btrfs_root *root, struct btrfs_path *p,
        if (tmp) {
                /* first we do an atomic uptodate check */
                if (btrfs_buffer_uptodate(tmp, gen, 1) > 0) {
+                       /*
+                        * Do extra check for first_key, eb can be stale due to
+                        * being cached, read from scrub, or have multiple
+                        * parents (shared tree blocks).
+                        */
+                       if (btrfs_verify_level_key(tmp,
+                                       parent_level - 1, &first_key, gen)) {
+                               free_extent_buffer(tmp);
+                               return -EUCLEAN;
+                       }
                        *eb_ret = tmp;
                        return 0;
                }
@@ -2706,7 +2711,6 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root,
                      const struct btrfs_key *key, struct btrfs_path *p,
                      int ins_len, int cow)
 {
-       struct btrfs_fs_info *fs_info = root->fs_info;
        struct extent_buffer *b;
        int slot;
        int ret;
@@ -2904,7 +2908,7 @@ cow_done:
                } else {
                        p->slots[level] = slot;
                        if (ins_len > 0 &&
-                           btrfs_leaf_free_space(fs_info, b) < ins_len) {
+                           btrfs_leaf_free_space(b) < ins_len) {
                                if (write_lock_level < 1) {
                                        write_lock_level = 1;
                                        btrfs_release_path(p);
@@ -3203,10 +3207,10 @@ void btrfs_set_item_key_safe(struct btrfs_fs_info *fs_info,
  * error, and > 0 if there was no room in the left hand block.
  */
 static int push_node_left(struct btrfs_trans_handle *trans,
-                         struct btrfs_fs_info *fs_info,
                          struct extent_buffer *dst,
                          struct extent_buffer *src, int empty)
 {
+       struct btrfs_fs_info *fs_info = trans->fs_info;
        int push_items = 0;
        int src_nritems;
        int dst_nritems;
@@ -3239,8 +3243,7 @@ static int push_node_left(struct btrfs_trans_handle *trans,
        } else
                push_items = min(src_nritems - 8, push_items);
 
-       ret = tree_mod_log_eb_copy(fs_info, dst, src, dst_nritems, 0,
-                                  push_items);
+       ret = tree_mod_log_eb_copy(dst, src, dst_nritems, 0, push_items);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
                return ret;
@@ -3278,10 +3281,10 @@ static int push_node_left(struct btrfs_trans_handle *trans,
  * this will  only push up to 1/2 the contents of the left node over
  */
 static int balance_node_right(struct btrfs_trans_handle *trans,
-                             struct btrfs_fs_info *fs_info,
                              struct extent_buffer *dst,
                              struct extent_buffer *src)
 {
+       struct btrfs_fs_info *fs_info = trans->fs_info;
        int push_items = 0;
        int max_push;
        int src_nritems;
@@ -3315,8 +3318,8 @@ static int balance_node_right(struct btrfs_trans_handle *trans,
                                      (dst_nritems) *
                                      sizeof(struct btrfs_key_ptr));
 
-       ret = tree_mod_log_eb_copy(fs_info, dst, src, 0,
-                                  src_nritems - push_items, push_items);
+       ret = tree_mod_log_eb_copy(dst, src, 0, src_nritems - push_items,
+                                  push_items);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
                return ret;
@@ -3404,7 +3407,7 @@ static noinline int insert_new_root(struct btrfs_trans_handle *trans,
  * blocknr is the block the key points to.
  */
 static void insert_ptr(struct btrfs_trans_handle *trans,
-                      struct btrfs_fs_info *fs_info, struct btrfs_path *path,
+                      struct btrfs_path *path,
                       struct btrfs_disk_key *key, u64 bytenr,
                       int slot, int level)
 {
@@ -3417,7 +3420,7 @@ static void insert_ptr(struct btrfs_trans_handle *trans,
        lower = path->nodes[level];
        nritems = btrfs_header_nritems(lower);
        BUG_ON(slot > nritems);
-       BUG_ON(nritems == BTRFS_NODEPTRS_PER_BLOCK(fs_info));
+       BUG_ON(nritems == BTRFS_NODEPTRS_PER_BLOCK(trans->fs_info));
        if (slot != nritems) {
                if (level) {
                        ret = tree_mod_log_insert_move(lower, slot + 1, slot,
@@ -3501,7 +3504,7 @@ static noinline int split_node(struct btrfs_trans_handle *trans,
        root_add_used(root, fs_info->nodesize);
        ASSERT(btrfs_header_level(c) == level);
 
-       ret = tree_mod_log_eb_copy(fs_info, split, c, 0, mid, c_nritems - mid);
+       ret = tree_mod_log_eb_copy(split, c, 0, mid, c_nritems - mid);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
                return ret;
@@ -3517,7 +3520,7 @@ static noinline int split_node(struct btrfs_trans_handle *trans,
        btrfs_mark_buffer_dirty(c);
        btrfs_mark_buffer_dirty(split);
 
-       insert_ptr(trans, fs_info, path, &disk_key, split->start,
+       insert_ptr(trans, path, &disk_key, split->start,
                   path->slots[level + 1] + 1, level + 1);
 
        if (path->slots[level] >= mid) {
@@ -3565,9 +3568,9 @@ static int leaf_space_used(struct extent_buffer *l, int start, int nr)
  * the start of the leaf data.  IOW, how much room
  * the leaf has left for both items and data
  */
-noinline int btrfs_leaf_free_space(struct btrfs_fs_info *fs_info,
-                                  struct extent_buffer *leaf)
+noinline int btrfs_leaf_free_space(struct extent_buffer *leaf)
 {
+       struct btrfs_fs_info *fs_info = leaf->fs_info;
        int nritems = btrfs_header_nritems(leaf);
        int ret;
 
@@ -3586,13 +3589,13 @@ noinline int btrfs_leaf_free_space(struct btrfs_fs_info *fs_info,
  * min slot controls the lowest index we're willing to push to the
  * right.  We'll push up to and including min_slot, but no lower
  */
-static noinline int __push_leaf_right(struct btrfs_fs_info *fs_info,
-                                     struct btrfs_path *path,
+static noinline int __push_leaf_right(struct btrfs_path *path,
                                      int data_size, int empty,
                                      struct extent_buffer *right,
                                      int free_space, u32 left_nritems,
                                      u32 min_slot)
 {
+       struct btrfs_fs_info *fs_info = right->fs_info;
        struct extent_buffer *left = path->nodes[0];
        struct extent_buffer *upper = path->nodes[1];
        struct btrfs_map_token token;
@@ -3626,7 +3629,8 @@ static noinline int __push_leaf_right(struct btrfs_fs_info *fs_info,
                        if (path->slots[0] > i)
                                break;
                        if (path->slots[0] == i) {
-                               int space = btrfs_leaf_free_space(fs_info, left);
+                               int space = btrfs_leaf_free_space(left);
+
                                if (space + push_space * 2 > free_space)
                                        break;
                        }
@@ -3655,10 +3659,10 @@ static noinline int __push_leaf_right(struct btrfs_fs_info *fs_info,
        right_nritems = btrfs_header_nritems(right);
 
        push_space = btrfs_item_end_nr(left, left_nritems - push_items);
-       push_space -= leaf_data_end(fs_info, left);
+       push_space -= leaf_data_end(left);
 
        /* make room in the right data area */
-       data_end = leaf_data_end(fs_info, right);
+       data_end = leaf_data_end(right);
        memmove_extent_buffer(right,
                              BTRFS_LEAF_DATA_OFFSET + data_end - push_space,
                              BTRFS_LEAF_DATA_OFFSET + data_end,
@@ -3667,7 +3671,7 @@ static noinline int __push_leaf_right(struct btrfs_fs_info *fs_info,
        /* copy from the left data area */
        copy_extent_buffer(right, left, BTRFS_LEAF_DATA_OFFSET +
                     BTRFS_LEAF_DATA_SIZE(fs_info) - push_space,
-                    BTRFS_LEAF_DATA_OFFSET + leaf_data_end(fs_info, left),
+                    BTRFS_LEAF_DATA_OFFSET + leaf_data_end(left),
                     push_space);
 
        memmove_extent_buffer(right, btrfs_item_nr_offset(push_items),
@@ -3695,7 +3699,7 @@ static noinline int __push_leaf_right(struct btrfs_fs_info *fs_info,
        if (left_nritems)
                btrfs_mark_buffer_dirty(left);
        else
-               clean_tree_block(fs_info, left);
+               btrfs_clean_tree_block(left);
 
        btrfs_mark_buffer_dirty(right);
 
@@ -3707,7 +3711,7 @@ static noinline int __push_leaf_right(struct btrfs_fs_info *fs_info,
        if (path->slots[0] >= left_nritems) {
                path->slots[0] -= left_nritems;
                if (btrfs_header_nritems(path->nodes[0]) == 0)
-                       clean_tree_block(fs_info, path->nodes[0]);
+                       btrfs_clean_tree_block(path->nodes[0]);
                btrfs_tree_unlock(path->nodes[0]);
                free_extent_buffer(path->nodes[0]);
                path->nodes[0] = right;
@@ -3739,7 +3743,6 @@ static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root
                           int min_data_size, int data_size,
                           int empty, u32 min_slot)
 {
-       struct btrfs_fs_info *fs_info = root->fs_info;
        struct extent_buffer *left = path->nodes[0];
        struct extent_buffer *right;
        struct extent_buffer *upper;
@@ -3758,7 +3761,7 @@ static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root
 
        btrfs_assert_tree_locked(path->nodes[1]);
 
-       right = read_node_slot(fs_info, upper, slot + 1);
+       right = read_node_slot(upper, slot + 1);
        /*
         * slot + 1 is not valid or we fail to read the right node,
         * no big deal, just return.
@@ -3769,7 +3772,7 @@ static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root
        btrfs_tree_lock(right);
        btrfs_set_lock_blocking_write(right);
 
-       free_space = btrfs_leaf_free_space(fs_info, right);
+       free_space = btrfs_leaf_free_space(right);
        if (free_space < data_size)
                goto out_unlock;
 
@@ -3779,7 +3782,7 @@ static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root
        if (ret)
                goto out_unlock;
 
-       free_space = btrfs_leaf_free_space(fs_info, right);
+       free_space = btrfs_leaf_free_space(right);
        if (free_space < data_size)
                goto out_unlock;
 
@@ -3800,7 +3803,7 @@ static int push_leaf_right(struct btrfs_trans_handle *trans, struct btrfs_root
                return 0;
        }
 
-       return __push_leaf_right(fs_info, path, min_data_size, empty,
+       return __push_leaf_right(path, min_data_size, empty,
                                right, free_space, left_nritems, min_slot);
 out_unlock:
        btrfs_tree_unlock(right);
@@ -3816,12 +3819,12 @@ out_unlock:
  * item at 'max_slot' won't be touched.  Use (u32)-1 to make us do all the
  * items
  */
-static noinline int __push_leaf_left(struct btrfs_fs_info *fs_info,
-                                    struct btrfs_path *path, int data_size,
+static noinline int __push_leaf_left(struct btrfs_path *path, int data_size,
                                     int empty, struct extent_buffer *left,
                                     int free_space, u32 right_nritems,
                                     u32 max_slot)
 {
+       struct btrfs_fs_info *fs_info = left->fs_info;
        struct btrfs_disk_key disk_key;
        struct extent_buffer *right = path->nodes[0];
        int i;
@@ -3849,7 +3852,8 @@ static noinline int __push_leaf_left(struct btrfs_fs_info *fs_info,
                        if (path->slots[0] < i)
                                break;
                        if (path->slots[0] == i) {
-                               int space = btrfs_leaf_free_space(fs_info, right);
+                               int space = btrfs_leaf_free_space(right);
+
                                if (space + push_space * 2 > free_space)
                                        break;
                        }
@@ -3882,7 +3886,7 @@ static noinline int __push_leaf_left(struct btrfs_fs_info *fs_info,
                     btrfs_item_offset_nr(right, push_items - 1);
 
        copy_extent_buffer(left, right, BTRFS_LEAF_DATA_OFFSET +
-                    leaf_data_end(fs_info, left) - push_space,
+                    leaf_data_end(left) - push_space,
                     BTRFS_LEAF_DATA_OFFSET +
                     btrfs_item_offset_nr(right, push_items - 1),
                     push_space);
@@ -3909,11 +3913,11 @@ static noinline int __push_leaf_left(struct btrfs_fs_info *fs_info,
 
        if (push_items < right_nritems) {
                push_space = btrfs_item_offset_nr(right, push_items - 1) -
-                                                 leaf_data_end(fs_info, right);
+                                                 leaf_data_end(right);
                memmove_extent_buffer(right, BTRFS_LEAF_DATA_OFFSET +
                                      BTRFS_LEAF_DATA_SIZE(fs_info) - push_space,
                                      BTRFS_LEAF_DATA_OFFSET +
-                                     leaf_data_end(fs_info, right), push_space);
+                                     leaf_data_end(right), push_space);
 
                memmove_extent_buffer(right, btrfs_item_nr_offset(0),
                              btrfs_item_nr_offset(push_items),
@@ -3935,7 +3939,7 @@ static noinline int __push_leaf_left(struct btrfs_fs_info *fs_info,
        if (right_nritems)
                btrfs_mark_buffer_dirty(right);
        else
-               clean_tree_block(fs_info, right);
+               btrfs_clean_tree_block(right);
 
        btrfs_item_key(right, &disk_key, 0);
        fixup_low_keys(path, &disk_key, 1);
@@ -3972,7 +3976,6 @@ static int push_leaf_left(struct btrfs_trans_handle *trans, struct btrfs_root
                          *root, struct btrfs_path *path, int min_data_size,
                          int data_size, int empty, u32 max_slot)
 {
-       struct btrfs_fs_info *fs_info = root->fs_info;
        struct extent_buffer *right = path->nodes[0];
        struct extent_buffer *left;
        int slot;
@@ -3992,7 +3995,7 @@ static int push_leaf_left(struct btrfs_trans_handle *trans, struct btrfs_root
 
        btrfs_assert_tree_locked(path->nodes[1]);
 
-       left = read_node_slot(fs_info, path->nodes[1], slot - 1);
+       left = read_node_slot(path->nodes[1], slot - 1);
        /*
         * slot - 1 is not valid or we fail to read the left node,
         * no big deal, just return.
@@ -4003,7 +4006,7 @@ static int push_leaf_left(struct btrfs_trans_handle *trans, struct btrfs_root
        btrfs_tree_lock(left);
        btrfs_set_lock_blocking_write(left);
 
-       free_space = btrfs_leaf_free_space(fs_info, left);
+       free_space = btrfs_leaf_free_space(left);
        if (free_space < data_size) {
                ret = 1;
                goto out;
@@ -4019,13 +4022,13 @@ static int push_leaf_left(struct btrfs_trans_handle *trans, struct btrfs_root
                goto out;
        }
 
-       free_space = btrfs_leaf_free_space(fs_info, left);
+       free_space = btrfs_leaf_free_space(left);
        if (free_space < data_size) {
                ret = 1;
                goto out;
        }
 
-       return __push_leaf_left(fs_info, path, min_data_size,
+       return __push_leaf_left(path, min_data_size,
                               empty, left, free_space, right_nritems,
                               max_slot);
 out:
@@ -4039,12 +4042,12 @@ out:
  * available for the resulting leaf level of the path.
  */
 static noinline void copy_for_split(struct btrfs_trans_handle *trans,
-                                   struct btrfs_fs_info *fs_info,
                                    struct btrfs_path *path,
                                    struct extent_buffer *l,
                                    struct extent_buffer *right,
                                    int slot, int mid, int nritems)
 {
+       struct btrfs_fs_info *fs_info = trans->fs_info;
        int data_copy_size;
        int rt_data_off;
        int i;
@@ -4055,7 +4058,7 @@ static noinline void copy_for_split(struct btrfs_trans_handle *trans,
 
        nritems = nritems - mid;
        btrfs_set_header_nritems(right, nritems);
-       data_copy_size = btrfs_item_end_nr(l, mid) - leaf_data_end(fs_info, l);
+       data_copy_size = btrfs_item_end_nr(l, mid) - leaf_data_end(l);
 
        copy_extent_buffer(right, l, btrfs_item_nr_offset(0),
                           btrfs_item_nr_offset(mid),
@@ -4064,7 +4067,7 @@ static noinline void copy_for_split(struct btrfs_trans_handle *trans,
        copy_extent_buffer(right, l,
                     BTRFS_LEAF_DATA_OFFSET + BTRFS_LEAF_DATA_SIZE(fs_info) -
                     data_copy_size, BTRFS_LEAF_DATA_OFFSET +
-                    leaf_data_end(fs_info, l), data_copy_size);
+                    leaf_data_end(l), data_copy_size);
 
        rt_data_off = BTRFS_LEAF_DATA_SIZE(fs_info) - btrfs_item_end_nr(l, mid);
 
@@ -4079,8 +4082,7 @@ static noinline void copy_for_split(struct btrfs_trans_handle *trans,
 
        btrfs_set_header_nritems(l, mid);
        btrfs_item_key(right, &disk_key, 0);
-       insert_ptr(trans, fs_info, path, &disk_key, right->start,
-                  path->slots[1] + 1, 1);
+       insert_ptr(trans, path, &disk_key, right->start, path->slots[1] + 1, 1);
 
        btrfs_mark_buffer_dirty(right);
        btrfs_mark_buffer_dirty(l);
@@ -4115,7 +4117,6 @@ static noinline int push_for_double_split(struct btrfs_trans_handle *trans,
                                          struct btrfs_path *path,
                                          int data_size)
 {
-       struct btrfs_fs_info *fs_info = root->fs_info;
        int ret;
        int progress = 0;
        int slot;
@@ -4124,7 +4125,7 @@ static noinline int push_for_double_split(struct btrfs_trans_handle *trans,
 
        slot = path->slots[0];
        if (slot < btrfs_header_nritems(path->nodes[0]))
-               space_needed -= btrfs_leaf_free_space(fs_info, path->nodes[0]);
+               space_needed -= btrfs_leaf_free_space(path->nodes[0]);
 
        /*
         * try to push all the items after our slot into the
@@ -4145,14 +4146,14 @@ static noinline int push_for_double_split(struct btrfs_trans_handle *trans,
        if (path->slots[0] == 0 || path->slots[0] == nritems)
                return 0;
 
-       if (btrfs_leaf_free_space(fs_info, path->nodes[0]) >= data_size)
+       if (btrfs_leaf_free_space(path->nodes[0]) >= data_size)
                return 0;
 
        /* try to push all the items before our slot into the next leaf */
        slot = path->slots[0];
        space_needed = data_size;
        if (slot > 0)
-               space_needed -= btrfs_leaf_free_space(fs_info, path->nodes[0]);
+               space_needed -= btrfs_leaf_free_space(path->nodes[0]);
        ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot);
        if (ret < 0)
                return ret;
@@ -4201,7 +4202,7 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
                int space_needed = data_size;
 
                if (slot < btrfs_header_nritems(l))
-                       space_needed -= btrfs_leaf_free_space(fs_info, l);
+                       space_needed -= btrfs_leaf_free_space(l);
 
                wret = push_leaf_right(trans, root, path, space_needed,
                                       space_needed, 0, 0);
@@ -4210,8 +4211,7 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
                if (wret) {
                        space_needed = data_size;
                        if (slot > 0)
-                               space_needed -= btrfs_leaf_free_space(fs_info,
-                                                                     l);
+                               space_needed -= btrfs_leaf_free_space(l);
                        wret = push_leaf_left(trans, root, path, space_needed,
                                              space_needed, 0, (u32)-1);
                        if (wret < 0)
@@ -4220,7 +4220,7 @@ static noinline int split_leaf(struct btrfs_trans_handle *trans,
                l = path->nodes[0];
 
                /* did the pushes work? */
-               if (btrfs_leaf_free_space(fs_info, l) >= data_size)
+               if (btrfs_leaf_free_space(l) >= data_size)
                        return 0;
        }
 
@@ -4288,7 +4288,7 @@ again:
        if (split == 0) {
                if (mid <= slot) {
                        btrfs_set_header_nritems(right, 0);
-                       insert_ptr(trans, fs_info, path, &disk_key,
+                       insert_ptr(trans, path, &disk_key,
                                   right->start, path->slots[1] + 1, 1);
                        btrfs_tree_unlock(path->nodes[0]);
                        free_extent_buffer(path->nodes[0]);
@@ -4297,7 +4297,7 @@ again:
                        path->slots[1] += 1;
                } else {
                        btrfs_set_header_nritems(right, 0);
-                       insert_ptr(trans, fs_info, path, &disk_key,
+                       insert_ptr(trans, path, &disk_key,
                                   right->start, path->slots[1], 1);
                        btrfs_tree_unlock(path->nodes[0]);
                        free_extent_buffer(path->nodes[0]);
@@ -4314,7 +4314,7 @@ again:
                return ret;
        }
 
-       copy_for_split(trans, fs_info, path, l, right, slot, mid, nritems);
+       copy_for_split(trans, path, l, right, slot, mid, nritems);
 
        if (split == 2) {
                BUG_ON(num_doubles != 0);
@@ -4327,7 +4327,7 @@ again:
 push_for_double:
        push_for_double_split(trans, root, path, data_size);
        tried_avoid_double = 1;
-       if (btrfs_leaf_free_space(fs_info, path->nodes[0]) >= data_size)
+       if (btrfs_leaf_free_space(path->nodes[0]) >= data_size)
                return 0;
        goto again;
 }
@@ -4336,7 +4336,6 @@ static noinline int setup_leaf_for_split(struct btrfs_trans_handle *trans,
                                         struct btrfs_root *root,
                                         struct btrfs_path *path, int ins_len)
 {
-       struct btrfs_fs_info *fs_info = root->fs_info;
        struct btrfs_key key;
        struct extent_buffer *leaf;
        struct btrfs_file_extent_item *fi;
@@ -4350,7 +4349,7 @@ static noinline int setup_leaf_for_split(struct btrfs_trans_handle *trans,
        BUG_ON(key.type != BTRFS_EXTENT_DATA_KEY &&
               key.type != BTRFS_EXTENT_CSUM_KEY);
 
-       if (btrfs_leaf_free_space(fs_info, leaf) >= ins_len)
+       if (btrfs_leaf_free_space(leaf) >= ins_len)
                return 0;
 
        item_size = btrfs_item_size_nr(leaf, path->slots[0]);
@@ -4377,7 +4376,7 @@ static noinline int setup_leaf_for_split(struct btrfs_trans_handle *trans,
                goto err;
 
        /* the leaf has  changed, it now has room.  return now */
-       if (btrfs_leaf_free_space(fs_info, path->nodes[0]) >= ins_len)
+       if (btrfs_leaf_free_space(path->nodes[0]) >= ins_len)
                goto err;
 
        if (key.type == BTRFS_EXTENT_DATA_KEY) {
@@ -4400,8 +4399,7 @@ err:
        return ret;
 }
 
-static noinline int split_item(struct btrfs_fs_info *fs_info,
-                              struct btrfs_path *path,
+static noinline int split_item(struct btrfs_path *path,
                               const struct btrfs_key *new_key,
                               unsigned long split_offset)
 {
@@ -4416,7 +4414,7 @@ static noinline int split_item(struct btrfs_fs_info *fs_info,
        struct btrfs_disk_key disk_key;
 
        leaf = path->nodes[0];
-       BUG_ON(btrfs_leaf_free_space(fs_info, leaf) < sizeof(struct btrfs_item));
+       BUG_ON(btrfs_leaf_free_space(leaf) < sizeof(struct btrfs_item));
 
        btrfs_set_path_blocking(path);
 
@@ -4465,7 +4463,7 @@ static noinline int split_item(struct btrfs_fs_info *fs_info,
                            item_size - split_offset);
        btrfs_mark_buffer_dirty(leaf);
 
-       BUG_ON(btrfs_leaf_free_space(fs_info, leaf) < 0);
+       BUG_ON(btrfs_leaf_free_space(leaf) < 0);
        kfree(buf);
        return 0;
 }
@@ -4497,7 +4495,7 @@ int btrfs_split_item(struct btrfs_trans_handle *trans,
        if (ret)
                return ret;
 
-       ret = split_item(root->fs_info, path, new_key, split_offset);
+       ret = split_item(path, new_key, split_offset);
        return ret;
 }
 
@@ -4543,8 +4541,7 @@ int btrfs_duplicate_item(struct btrfs_trans_handle *trans,
  * off the end of the item or if we shift the item to chop bytes off
  * the front.
  */
-void btrfs_truncate_item(struct btrfs_fs_info *fs_info,
-                        struct btrfs_path *path, u32 new_size, int from_end)
+void btrfs_truncate_item(struct btrfs_path *path, u32 new_size, int from_end)
 {
        int slot;
        struct extent_buffer *leaf;
@@ -4567,7 +4564,7 @@ void btrfs_truncate_item(struct btrfs_fs_info *fs_info,
                return;
 
        nritems = btrfs_header_nritems(leaf);
-       data_end = leaf_data_end(fs_info, leaf);
+       data_end = leaf_data_end(leaf);
 
        old_data_start = btrfs_item_offset_nr(leaf, slot);
 
@@ -4633,7 +4630,7 @@ void btrfs_truncate_item(struct btrfs_fs_info *fs_info,
        btrfs_set_item_size(leaf, item, new_size);
        btrfs_mark_buffer_dirty(leaf);
 
-       if (btrfs_leaf_free_space(fs_info, leaf) < 0) {
+       if (btrfs_leaf_free_space(leaf) < 0) {
                btrfs_print_leaf(leaf);
                BUG();
        }
@@ -4642,8 +4639,7 @@ void btrfs_truncate_item(struct btrfs_fs_info *fs_info,
 /*
  * make the item pointed to by the path bigger, data_size is the added size.
  */
-void btrfs_extend_item(struct btrfs_fs_info *fs_info, struct btrfs_path *path,
-                      u32 data_size)
+void btrfs_extend_item(struct btrfs_path *path, u32 data_size)
 {
        int slot;
        struct extent_buffer *leaf;
@@ -4660,9 +4656,9 @@ void btrfs_extend_item(struct btrfs_fs_info *fs_info, struct btrfs_path *path,
        leaf = path->nodes[0];
 
        nritems = btrfs_header_nritems(leaf);
-       data_end = leaf_data_end(fs_info, leaf);
+       data_end = leaf_data_end(leaf);
 
-       if (btrfs_leaf_free_space(fs_info, leaf) < data_size) {
+       if (btrfs_leaf_free_space(leaf) < data_size) {
                btrfs_print_leaf(leaf);
                BUG();
        }
@@ -4672,9 +4668,9 @@ void btrfs_extend_item(struct btrfs_fs_info *fs_info, struct btrfs_path *path,
        BUG_ON(slot < 0);
        if (slot >= nritems) {
                btrfs_print_leaf(leaf);
-               btrfs_crit(fs_info, "slot %d too large, nritems %d",
+               btrfs_crit(leaf->fs_info, "slot %d too large, nritems %d",
                           slot, nritems);
-               BUG_ON(1);
+               BUG();
        }
 
        /*
@@ -4701,7 +4697,7 @@ void btrfs_extend_item(struct btrfs_fs_info *fs_info, struct btrfs_path *path,
        btrfs_set_item_size(leaf, item, old_size + data_size);
        btrfs_mark_buffer_dirty(leaf);
 
-       if (btrfs_leaf_free_space(fs_info, leaf) < 0) {
+       if (btrfs_leaf_free_space(leaf) < 0) {
                btrfs_print_leaf(leaf);
                BUG();
        }
@@ -4738,12 +4734,12 @@ void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path,
        slot = path->slots[0];
 
        nritems = btrfs_header_nritems(leaf);
-       data_end = leaf_data_end(fs_info, leaf);
+       data_end = leaf_data_end(leaf);
 
-       if (btrfs_leaf_free_space(fs_info, leaf) < total_size) {
+       if (btrfs_leaf_free_space(leaf) < total_size) {
                btrfs_print_leaf(leaf);
                btrfs_crit(fs_info, "not enough freespace need %u have %d",
-                          total_size, btrfs_leaf_free_space(fs_info, leaf));
+                          total_size, btrfs_leaf_free_space(leaf));
                BUG();
        }
 
@@ -4754,7 +4750,7 @@ void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path,
                        btrfs_print_leaf(leaf);
                        btrfs_crit(fs_info, "slot %d old_data %d data_end %d",
                                   slot, old_data, data_end);
-                       BUG_ON(1);
+                       BUG();
                }
                /*
                 * item0..itemN ... dataN.offset..dataN.size .. data0.size
@@ -4794,7 +4790,7 @@ void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path,
        btrfs_set_header_nritems(leaf, nritems + nr);
        btrfs_mark_buffer_dirty(leaf);
 
-       if (btrfs_leaf_free_space(fs_info, leaf) < 0) {
+       if (btrfs_leaf_free_space(leaf) < 0) {
                btrfs_print_leaf(leaf);
                BUG();
        }
@@ -4966,7 +4962,7 @@ int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
        nritems = btrfs_header_nritems(leaf);
 
        if (slot + nr != nritems) {
-               int data_end = leaf_data_end(fs_info, leaf);
+               int data_end = leaf_data_end(leaf);
 
                memmove_extent_buffer(leaf, BTRFS_LEAF_DATA_OFFSET +
                              data_end + dsize,
@@ -4996,7 +4992,7 @@ int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
                        btrfs_set_header_level(leaf, 0);
                } else {
                        btrfs_set_path_blocking(path);
-                       clean_tree_block(fs_info, leaf);
+                       btrfs_clean_tree_block(leaf);
                        btrfs_del_leaf(trans, root, path, leaf);
                }
        } else {
@@ -5126,7 +5122,6 @@ int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
                         struct btrfs_path *path,
                         u64 min_trans)
 {
-       struct btrfs_fs_info *fs_info = root->fs_info;
        struct extent_buffer *cur;
        struct btrfs_key found_key;
        int slot;
@@ -5207,7 +5202,7 @@ find_next_key:
                        goto out;
                }
                btrfs_set_path_blocking(path);
-               cur = read_node_slot(fs_info, cur, slot);
+               cur = read_node_slot(cur, slot);
                if (IS_ERR(cur)) {
                        ret = PTR_ERR(cur);
                        goto out;
@@ -5229,14 +5224,12 @@ out:
        return ret;
 }
 
-static int tree_move_down(struct btrfs_fs_info *fs_info,
-                          struct btrfs_path *path,
-                          int *level)
+static int tree_move_down(struct btrfs_path *path, int *level)
 {
        struct extent_buffer *eb;
 
        BUG_ON(*level == 0);
-       eb = read_node_slot(fs_info, path->nodes[*level], path->slots[*level]);
+       eb = read_node_slot(path->nodes[*level], path->slots[*level]);
        if (IS_ERR(eb))
                return PTR_ERR(eb);
 
@@ -5276,8 +5269,7 @@ static int tree_move_next_or_upnext(struct btrfs_path *path,
  * Returns 1 if it had to move up and next. 0 is returned if it moved only next
  * or down.
  */
-static int tree_advance(struct btrfs_fs_info *fs_info,
-                       struct btrfs_path *path,
+static int tree_advance(struct btrfs_path *path,
                        int *level, int root_level,
                        int allow_down,
                        struct btrfs_key *key)
@@ -5287,7 +5279,7 @@ static int tree_advance(struct btrfs_fs_info *fs_info,
        if (*level == 0 || !allow_down) {
                ret = tree_move_next_or_upnext(path, level, root_level);
        } else {
-               ret = tree_move_down(fs_info, path, level);
+               ret = tree_move_down(path, level);
        }
        if (ret >= 0) {
                if (*level == 0)
@@ -5464,7 +5456,7 @@ int btrfs_compare_trees(struct btrfs_root *left_root,
 
        while (1) {
                if (advance_left && !left_end_reached) {
-                       ret = tree_advance(fs_info, left_path, &left_level,
+                       ret = tree_advance(left_path, &left_level,
                                        left_root_level,
                                        advance_left != ADVANCE_ONLY_NEXT,
                                        &left_key);
@@ -5475,7 +5467,7 @@ int btrfs_compare_trees(struct btrfs_root *left_root,
                        advance_left = 0;
                }
                if (advance_right && !right_end_reached) {
-                       ret = tree_advance(fs_info, right_path, &right_level,
+                       ret = tree_advance(right_path, &right_level,
                                        right_root_level,
                                        advance_right != ADVANCE_ONLY_NEXT,
                                        &right_key);