switch (node->type) {
                case BTRFS_TREE_BLOCK_REF_KEY: {
                        /* NORMAL INDIRECT METADATA backref */
-                       struct btrfs_delayed_tree_ref *ref;
                        struct btrfs_key *key_ptr = NULL;
+                       /* The owner of a tree block ref is the level. */
+                       int level = btrfs_delayed_ref_owner(node);
 
                        if (head->extent_op && head->extent_op->update_key) {
                                btrfs_disk_key_to_cpu(&key, &head->extent_op->key);
                                key_ptr = &key;
                        }
 
-                       ref = btrfs_delayed_node_to_tree_ref(node);
                        ret = add_indirect_ref(fs_info, preftrees, node->ref_root,
-                                              key_ptr, ref->level + 1,
-                                              node->bytenr, count, sc,
-                                              GFP_ATOMIC);
+                                              key_ptr, level + 1, node->bytenr,
+                                              count, sc, GFP_ATOMIC);
                        break;
                }
                case BTRFS_SHARED_BLOCK_REF_KEY: {
-                       /* SHARED DIRECT METADATA backref */
-                       struct btrfs_delayed_tree_ref *ref;
-
-                       ref = btrfs_delayed_node_to_tree_ref(node);
+                       /*
+                        * SHARED DIRECT METADATA backref
+                        *
+                        * The owner of a tree block ref is the level.
+                        */
+                       int level = btrfs_delayed_ref_owner(node);
 
-                       ret = add_direct_ref(fs_info, preftrees, ref->level + 1,
+                       ret = add_direct_ref(fs_info, preftrees, level + 1,
                                             node->parent, node->bytenr, count,
                                             sc, GFP_ATOMIC);
                        break;
 
        struct btrfs_extent_inline_ref *iref;
        struct btrfs_path *path;
        struct extent_buffer *leaf;
-       struct btrfs_delayed_tree_ref *ref;
        u32 size = sizeof(*extent_item) + sizeof(*iref);
        u64 flags = extent_op->flags_to_set;
+       /* The owner of a tree block is the level. */
+       int level = btrfs_delayed_ref_owner(node);
        bool skinny_metadata = btrfs_fs_incompat(fs_info, SKINNY_METADATA);
 
-       ref = btrfs_delayed_node_to_tree_ref(node);
-
        extent_key.objectid = node->bytenr;
        if (skinny_metadata) {
-               extent_key.offset = ref->level;
+               /* The owner of a tree block is the level. */
+               extent_key.offset = level;
                extent_key.type = BTRFS_METADATA_ITEM_KEY;
        } else {
                extent_key.offset = node->num_bytes;
        } else {
                block_info = (struct btrfs_tree_block_info *)(extent_item + 1);
                btrfs_set_tree_block_key(leaf, block_info, &extent_op->key);
-               btrfs_set_tree_block_level(leaf, block_info, ref->level);
+               btrfs_set_tree_block_level(leaf, block_info, level);
                iref = (struct btrfs_extent_inline_ref *)(block_info + 1);
        }
 
 
 struct btrfs_file_extent_item;
 struct btrfs_ordered_extent;
 struct btrfs_delayed_ref_node;
-struct btrfs_delayed_tree_ref;
 struct btrfs_delayed_ref_head;
 struct btrfs_block_group;
 struct btrfs_free_cluster;