/*
  * check if the tree block can be shared by multiple trees
  */
-bool btrfs_block_can_be_shared(struct btrfs_trans_handle *trans,
-                              struct btrfs_root *root,
-                              struct extent_buffer *buf)
+bool btrfs_block_can_be_shared(const struct btrfs_trans_handle *trans,
+                              const struct btrfs_root *root,
+                              const struct extent_buffer *buf)
 {
        const u64 buf_gen = btrfs_header_generation(buf);
 
        return ret;
 }
 
-static inline int should_cow_block(struct btrfs_trans_handle *trans,
-                                  struct btrfs_root *root,
-                                  struct extent_buffer *buf)
+static inline int should_cow_block(const struct btrfs_trans_handle *trans,
+                                  const struct btrfs_root *root,
+                                  const struct extent_buffer *buf)
 {
        if (btrfs_is_testing(root->fs_info))
                return 0;
  * Slot may point to the total number of items (i.e. one position beyond the last
  * key) if the key is bigger than the last key in the extent buffer.
  */
-int btrfs_bin_search(struct extent_buffer *eb, int first_slot,
+int btrfs_bin_search(const struct extent_buffer *eb, int first_slot,
                     const struct btrfs_key *key, int *slot)
 {
        unsigned long p;
  * to the block in 'slot', and triggering ra on them.
  */
 static void reada_for_search(struct btrfs_fs_info *fs_info,
-                            struct btrfs_path *path,
+                            const struct btrfs_path *path,
                             int level, int slot, u64 objectid)
 {
        struct extent_buffer *node;
        }
 }
 
-static noinline void reada_for_balance(struct btrfs_path *path, int level)
+static noinline void reada_for_balance(const struct btrfs_path *path, int level)
 {
        struct extent_buffer *parent;
        int slot;
        return 0;
 }
 
-static inline int search_for_key_slot(struct extent_buffer *eb,
+static inline int search_for_key_slot(const struct extent_buffer *eb,
                                      int search_low_slot,
                                      const struct btrfs_key *key,
                                      int prev_cmp,
 
 
 static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
                               struct btrfs_delayed_ref_head *href,
-                              struct btrfs_delayed_ref_node *node,
+                              const struct btrfs_delayed_ref_node *node,
                               struct btrfs_delayed_extent_op *extra_op);
 static void __run_delayed_extent_op(struct btrfs_delayed_extent_op *extent_op,
                                    struct extent_buffer *leaf,
                                      u64 flags, u64 owner, u64 offset,
                                      struct btrfs_key *ins, int ref_mod, u64 oref_root);
 static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
-                                    struct btrfs_delayed_ref_node *node,
+                                    const struct btrfs_delayed_ref_node *node,
                                     struct btrfs_delayed_extent_op *extent_op);
-static int find_next_key(struct btrfs_path *path, int level,
+static int find_next_key(const struct btrfs_path *path, int level,
                         struct btrfs_key *key);
 
-static int block_group_bits(struct btrfs_block_group *cache, u64 bits)
+static int block_group_bits(const struct btrfs_block_group *cache, u64 bits)
 {
        return (cache->flags & bits) == bits;
 }
  * is_data == BTRFS_REF_TYPE_ANY, either type is OK.
  */
 int btrfs_get_extent_inline_ref_type(const struct extent_buffer *eb,
-                                    struct btrfs_extent_inline_ref *iref,
+                                    const struct btrfs_extent_inline_ref *iref,
                                     enum btrfs_inline_ref_type is_data)
 {
        struct btrfs_fs_info *fs_info = eb->fs_info;
        return ((u64)high_crc << 31) ^ (u64)low_crc;
 }
 
-static u64 hash_extent_data_ref_item(struct extent_buffer *leaf,
-                                    struct btrfs_extent_data_ref *ref)
+static u64 hash_extent_data_ref_item(const struct extent_buffer *leaf,
+                                    const struct btrfs_extent_data_ref *ref)
 {
        return hash_extent_data_ref(btrfs_extent_data_ref_root(leaf, ref),
                                    btrfs_extent_data_ref_objectid(leaf, ref),
                                    btrfs_extent_data_ref_offset(leaf, ref));
 }
 
-static bool match_extent_data_ref(struct extent_buffer *leaf,
-                                 struct btrfs_extent_data_ref *ref,
+static bool match_extent_data_ref(const struct extent_buffer *leaf,
+                                 const struct btrfs_extent_data_ref *ref,
                                  u64 root_objectid, u64 owner, u64 offset)
 {
        if (btrfs_extent_data_ref_root(leaf, ref) != root_objectid ||
 
 static noinline int insert_extent_data_ref(struct btrfs_trans_handle *trans,
                                           struct btrfs_path *path,
-                                          struct btrfs_delayed_ref_node *node,
+                                          const struct btrfs_delayed_ref_node *node,
                                           u64 bytenr)
 {
        struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
        return ret;
 }
 
-static noinline u32 extent_data_ref_count(struct btrfs_path *path,
-                                         struct btrfs_extent_inline_ref *iref)
+static noinline u32 extent_data_ref_count(const struct btrfs_path *path,
+                                         const struct btrfs_extent_inline_ref *iref)
 {
        struct btrfs_key key;
        struct extent_buffer *leaf;
-       struct btrfs_extent_data_ref *ref1;
-       struct btrfs_shared_data_ref *ref2;
+       const struct btrfs_extent_data_ref *ref1;
+       const struct btrfs_shared_data_ref *ref2;
        u32 num_refs = 0;
        int type;
 
                type = btrfs_get_extent_inline_ref_type(leaf, iref, BTRFS_REF_TYPE_DATA);
                ASSERT(type != BTRFS_REF_TYPE_INVALID);
                if (type == BTRFS_EXTENT_DATA_REF_KEY) {
-                       ref1 = (struct btrfs_extent_data_ref *)(&iref->offset);
+                       ref1 = (const struct btrfs_extent_data_ref *)(&iref->offset);
                        num_refs = btrfs_extent_data_ref_count(leaf, ref1);
                } else {
-                       ref2 = (struct btrfs_shared_data_ref *)(iref + 1);
+                       ref2 = (const struct btrfs_shared_data_ref *)(iref + 1);
                        num_refs = btrfs_shared_data_ref_count(leaf, ref2);
                }
        } else if (key.type == BTRFS_EXTENT_DATA_REF_KEY) {
 
 static noinline int insert_tree_block_ref(struct btrfs_trans_handle *trans,
                                          struct btrfs_path *path,
-                                         struct btrfs_delayed_ref_node *node,
+                                         const struct btrfs_delayed_ref_node *node,
                                          u64 bytenr)
 {
        struct btrfs_root *root = btrfs_extent_root(trans->fs_info, bytenr);
        return type;
 }
 
-static int find_next_key(struct btrfs_path *path, int level,
+static int find_next_key(const struct btrfs_path *path, int level,
                         struct btrfs_key *key)
 
 {
  *
  */
 static int __btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
-                                 struct btrfs_delayed_ref_node *node,
+                                 const struct btrfs_delayed_ref_node *node,
                                  struct btrfs_delayed_extent_op *extent_op)
 {
        BTRFS_PATH_AUTO_FREE(path);
 }
 
 static void free_head_ref_squota_rsv(struct btrfs_fs_info *fs_info,
-                                    struct btrfs_delayed_ref_head *href)
+                                    const struct btrfs_delayed_ref_head *href)
 {
        u64 root = href->owning_root;
 
 
 static int run_delayed_data_ref(struct btrfs_trans_handle *trans,
                                struct btrfs_delayed_ref_head *href,
-                               struct btrfs_delayed_ref_node *node,
+                               const struct btrfs_delayed_ref_node *node,
                                struct btrfs_delayed_extent_op *extent_op,
                                bool insert_reserved)
 {
 }
 
 static int run_delayed_extent_op(struct btrfs_trans_handle *trans,
-                                struct btrfs_delayed_ref_head *head,
+                                const struct btrfs_delayed_ref_head *head,
                                 struct btrfs_delayed_extent_op *extent_op)
 {
        struct btrfs_fs_info *fs_info = trans->fs_info;
 
 static int run_delayed_tree_ref(struct btrfs_trans_handle *trans,
                                struct btrfs_delayed_ref_head *href,
-                               struct btrfs_delayed_ref_node *node,
+                               const struct btrfs_delayed_ref_node *node,
                                struct btrfs_delayed_extent_op *extent_op,
                                bool insert_reserved)
 {
 /* helper function to actually process a single delayed ref entry */
 static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
                               struct btrfs_delayed_ref_head *href,
-                              struct btrfs_delayed_ref_node *node,
+                              const struct btrfs_delayed_ref_node *node,
                               struct btrfs_delayed_extent_op *extent_op,
                               bool insert_reserved)
 {
  */
 static int __btrfs_free_extent(struct btrfs_trans_handle *trans,
                               struct btrfs_delayed_ref_head *href,
-                              struct btrfs_delayed_ref_node *node,
+                              const struct btrfs_delayed_ref_node *node,
                               struct btrfs_delayed_extent_op *extent_op)
 {
        struct btrfs_fs_info *info = trans->fs_info;
 }
 
 static int alloc_reserved_tree_block(struct btrfs_trans_handle *trans,
-                                    struct btrfs_delayed_ref_node *node,
+                                    const struct btrfs_delayed_ref_node *node,
                                     struct btrfs_delayed_extent_op *extent_op)
 {
        struct btrfs_fs_info *fs_info = trans->fs_info;
        int ret;
        struct btrfs_block_group *block_group;
        struct btrfs_space_info *space_info;
-       struct btrfs_squota_delta delta = {
+       const struct btrfs_squota_delta delta = {
                .root = root_objectid,
                .num_bytes = ins->offset,
                .generation = trans->transid,