struct seq_list elem = SEQ_LIST_INIT(elem);
        int ret = 0;
        struct share_check shared = {
-               .root_objectid = root->objectid,
+               .root_objectid = root->root_key.objectid,
                .inum = inum,
                .share_count = 0,
        };
                        /* path must be released before calling iterate()! */
                        btrfs_debug(fs_root->fs_info,
                                "following ref at offset %u for inode %llu in tree %llu",
-                               cur, found_key.objectid, fs_root->objectid);
+                               cur, found_key.objectid,
+                               fs_root->root_key.objectid);
                        ret = iterate(parent, name_len,
                                      (unsigned long)(iref + 1), eb, ctx);
                        if (ret)
 
 static inline unsigned long btrfs_inode_hash(u64 objectid,
                                             const struct btrfs_root *root)
 {
-       u64 h = objectid ^ (root->objectid * GOLDEN_RATIO_PRIME);
+       u64 h = objectid ^ (root->root_key.objectid * GOLDEN_RATIO_PRIME);
 
 #if BITS_PER_LONG == 32
        h = (h >> 32) ^ (h & 0xffffffff);
        struct btrfs_root *root = inode->root;
 
        /* Output minus objectid, which is more meaningful */
-       if (root->objectid >= BTRFS_LAST_FREE_OBJECTID)
+       if (root->root_key.objectid >= BTRFS_LAST_FREE_OBJECTID)
                btrfs_warn_rl(root->fs_info,
        "csum failed root %lld ino %lld off %llu csum 0x%08x expected csum 0x%08x mirror %d",
-                       root->objectid, btrfs_ino(inode),
+                       root->root_key.objectid, btrfs_ino(inode),
                        logical_start, csum, csum_expected, mirror_num);
        else
                btrfs_warn_rl(root->fs_info,
        "csum failed root %llu ino %llu off %llu csum 0x%08x expected csum 0x%08x mirror %d",
-                       root->objectid, btrfs_ino(inode),
+                       root->root_key.objectid, btrfs_ino(inode),
                        logical_start, csum, csum_expected, mirror_num);
 }
 
 
        spin_lock(&fs_info->trans_lock);
        if (!test_and_set_bit(BTRFS_ROOT_DIRTY, &root->state)) {
                /* Want the extent tree to be the last on the list */
-               if (root->objectid == BTRFS_EXTENT_TREE_OBJECTID)
+               if (root->root_key.objectid == BTRFS_EXTENT_TREE_OBJECTID)
                        list_move_tail(&root->dirty_list,
                                       &fs_info->dirty_cowonly_roots);
                else
 
        int last_log_commit;
        pid_t log_start_pid;
 
-       u64 objectid;
        u64 last_trans;
 
        u32 type;
 
        if (unlikely(ret)) {
                btrfs_err(trans->fs_info,
                          "err add delayed dir index item(name: %.*s) into the insertion tree of the delayed node(root id: %llu, inode id: %llu, errno: %d)",
-                         name_len, name, delayed_node->root->objectid,
+                         name_len, name, delayed_node->root->root_key.objectid,
                          delayed_node->inode_id, ret);
                BUG();
        }
        if (unlikely(ret)) {
                btrfs_err(trans->fs_info,
                          "err add delayed dir index item(index: %llu) into the deletion tree of the delayed node(root id: %llu, inode id: %llu, errno: %d)",
-                         index, node->root->objectid, node->inode_id, ret);
+                         index, node->root->root_key.objectid,
+                         node->inode_id, ret);
                BUG();
        }
        mutex_unlock(&node->mutex);
 
  * Different roots are used for different purposes and may nest inside each
  * other and they require separate keysets.  As lockdep keys should be
  * static, assign keysets according to the purpose of the root as indicated
- * by btrfs_root->objectid.  This ensures that all special purpose roots
- * have separate keysets.
+ * by btrfs_root->root_key.objectid.  This ensures that all special purpose
+ * roots have separate keysets.
  *
  * Lock-nesting across peer nodes is always done with the immediate parent
  * node locked thus preventing deadlock.  As lockdep doesn't know this, use
        root->state = 0;
        root->orphan_cleanup_state = 0;
 
-       root->objectid = objectid;
        root->last_trans = 0;
        root->highest_objectid = 0;
        root->nr_delalloc_inodes = 0;
 
        type = FILEID_BTRFS_WITHOUT_PARENT;
 
        fid->objectid = btrfs_ino(BTRFS_I(inode));
-       fid->root_objectid = BTRFS_I(inode)->root->objectid;
+       fid->root_objectid = BTRFS_I(inode)->root->root_key.objectid;
        fid->gen = inode->i_generation;
 
        if (parent) {
 
                fid->parent_objectid = BTRFS_I(parent)->location.objectid;
                fid->parent_gen = parent->i_generation;
-               parent_root_id = BTRFS_I(parent)->root->objectid;
+               parent_root_id = BTRFS_I(parent)->root->root_key.objectid;
 
                if (parent_root_id != fid->root_objectid) {
                        fid->parent_root_objectid = parent_root_id;
 
        int level;
        bool root_dropped = false;
 
-       btrfs_debug(fs_info, "Drop subvolume %llu", root->objectid);
+       btrfs_debug(fs_info, "Drop subvolume %llu", root->root_key.objectid);
 
        path = btrfs_alloc_path();
        if (!path) {
 
        int drop_inode = 0;
 
        /* do not allow sys_link's with other subvols of the same device */
-       if (root->objectid != BTRFS_I(inode)->root->objectid)
+       if (root->root_key.objectid != BTRFS_I(inode)->root->root_key.objectid)
                return -EXDEV;
 
        if (inode->i_nlink >= BTRFS_LINK_MAX)
 
                ret = PTR_ERR(new_root);
                goto out;
        }
-       if (!is_fstree(new_root->objectid)) {
+       if (!is_fstree(new_root->root_key.objectid)) {
                ret = -ENOENT;
                goto out;
        }
 
        int ret;
 
        if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &root->fs_info->flags) ||
-           !is_fstree(root->objectid) || len == 0)
+           !is_fstree(root->root_key.objectid) || len == 0)
                return 0;
 
        /* @reserved parameter is mandatory for qgroup */
                        goto out;
                freed += changeset.bytes_changed;
        }
-       btrfs_qgroup_free_refroot(root->fs_info, root->objectid, freed,
+       btrfs_qgroup_free_refroot(root->fs_info, root->root_key.objectid, freed,
                                  BTRFS_QGROUP_RSV_DATA);
        ret = freed;
 out:
                                        changeset.bytes_changed, trace_op);
        if (free)
                btrfs_qgroup_free_refroot(BTRFS_I(inode)->root->fs_info,
-                               BTRFS_I(inode)->root->objectid,
+                               BTRFS_I(inode)->root->root_key.objectid,
                                changeset.bytes_changed, BTRFS_QGROUP_RSV_DATA);
        ret = changeset.bytes_changed;
 out:
        int ret;
 
        if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags) ||
-           !is_fstree(root->objectid) || num_bytes == 0)
+           !is_fstree(root->root_key.objectid) || num_bytes == 0)
                return 0;
 
        BUG_ON(num_bytes != round_down(num_bytes, fs_info->nodesize));
        struct btrfs_fs_info *fs_info = root->fs_info;
 
        if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags) ||
-           !is_fstree(root->objectid))
+           !is_fstree(root->root_key.objectid))
                return;
 
        /* TODO: Update trace point to handle such free */
        trace_qgroup_meta_free_all_pertrans(root);
        /* Special value -1 means to free all reserved space */
-       btrfs_qgroup_free_refroot(fs_info, root->objectid, (u64)-1,
+       btrfs_qgroup_free_refroot(fs_info, root->root_key.objectid, (u64)-1,
                                  BTRFS_QGROUP_RSV_META_PERTRANS);
 }
 
        struct btrfs_fs_info *fs_info = root->fs_info;
 
        if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags) ||
-           !is_fstree(root->objectid))
+           !is_fstree(root->root_key.objectid))
                return;
 
        /*
        num_bytes = sub_root_meta_rsv(root, num_bytes, type);
        BUG_ON(num_bytes != round_down(num_bytes, fs_info->nodesize));
        trace_qgroup_meta_reserve(root, type, -(s64)num_bytes);
-       btrfs_qgroup_free_refroot(fs_info, root->objectid, num_bytes, type);
+       btrfs_qgroup_free_refroot(fs_info, root->root_key.objectid,
+                                 num_bytes, type);
 }
 
 static void qgroup_convert_meta(struct btrfs_fs_info *fs_info, u64 ref_root,
        struct btrfs_fs_info *fs_info = root->fs_info;
 
        if (!test_bit(BTRFS_FS_QUOTA_ENABLED, &fs_info->flags) ||
-           !is_fstree(root->objectid))
+           !is_fstree(root->root_key.objectid))
                return;
        /* Same as btrfs_qgroup_free_meta_prealloc() */
        num_bytes = sub_root_meta_rsv(root, num_bytes,
                                      BTRFS_QGROUP_RSV_META_PREALLOC);
        trace_qgroup_meta_convert(root, num_bytes);
-       qgroup_convert_meta(fs_info, root->objectid, num_bytes);
+       qgroup_convert_meta(fs_info, root->root_key.objectid, num_bytes);
 }
 
 /*
                                inode->i_ino, unode->val, unode->aux);
                }
                btrfs_qgroup_free_refroot(BTRFS_I(inode)->root->fs_info,
-                               BTRFS_I(inode)->root->objectid,
+                               BTRFS_I(inode)->root->root_key.objectid,
                                changeset.bytes_changed, BTRFS_QGROUP_RSV_DATA);
 
        }
 
 
        INIT_LIST_HEAD(&ra->list);
        ra->action = action;
-       ra->root = root->objectid;
+       ra->root = root->root_key.objectid;
 
        /*
         * This is an allocation, preallocate the block_entry in case we haven't
                         * one we want to lookup below when we modify the
                         * re->num_refs.
                         */
-                       ref_root = root->objectid;
-                       re->root_objectid = root->objectid;
+                       ref_root = root->root_key.objectid;
+                       re->root_objectid = root->root_key.objectid;
                        re->num_refs = 0;
                }
 
                         * didn't thik of some other corner case.
                         */
                        btrfs_err(fs_info, "failed to find root %llu for %llu",
-                                 root->objectid, be->bytenr);
+                                 root->root_key.objectid, be->bytenr);
                        dump_block_entry(fs_info, be);
                        dump_ref_action(fs_info, ra);
                        kfree(ra);
 
                    cur->bytenr) {
                        btrfs_err(root->fs_info,
        "couldn't find block (%llu) (level %d) in tree (%llu) with key (%llu %u %llu)",
-                                 cur->bytenr, level - 1, root->objectid,
+                                 cur->bytenr, level - 1,
+                                 root->root_key.objectid,
                                  node_key->objectid, node_key->type,
                                  node_key->offset);
                        err = -ENOENT;
 
        u64 root = (u64)(uintptr_t)key;
        struct clone_root *cr = (struct clone_root *)elt;
 
-       if (root < cr->root->objectid)
+       if (root < cr->root->root_key.objectid)
                return -1;
-       if (root > cr->root->objectid)
+       if (root > cr->root->root_key.objectid)
                return 1;
        return 0;
 }
        struct clone_root *cr1 = (struct clone_root *)e1;
        struct clone_root *cr2 = (struct clone_root *)e2;
 
-       if (cr1->root->objectid < cr2->root->objectid)
+       if (cr1->root->root_key.objectid < cr2->root->root_key.objectid)
                return -1;
-       if (cr1->root->objectid > cr2->root->objectid)
+       if (cr1->root->root_key.objectid > cr2->root->root_key.objectid)
                return 1;
        return 0;
 }
                return -ENOMEM;
        }
 
-       key.objectid = send_root->objectid;
+       key.objectid = send_root->root_key.objectid;
        key.type = BTRFS_ROOT_BACKREF_KEY;
        key.offset = 0;
 
        leaf = path->nodes[0];
        btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
        if (key.type != BTRFS_ROOT_BACKREF_KEY ||
-           key.objectid != send_root->objectid) {
+           key.objectid != send_root->root_key.objectid) {
                ret = -ENOENT;
                goto out;
        }
 
        btrfs_debug(sctx->send_root->fs_info,
                    "send_clone offset=%llu, len=%d, clone_root=%llu, clone_inode=%llu, clone_offset=%llu",
-                   offset, len, clone_root->root->objectid, clone_root->ino,
-                   clone_root->offset);
+                   offset, len, clone_root->root->root_key.objectid,
+                   clone_root->ino, clone_root->offset);
 
        p = fs_path_alloc();
        if (!p)
 
        buf->f_fsid.val[0] = be32_to_cpu(fsid[0]) ^ be32_to_cpu(fsid[2]);
        buf->f_fsid.val[1] = be32_to_cpu(fsid[1]) ^ be32_to_cpu(fsid[3]);
        /* Mask in the root object ID too, to disambiguate subvols */
-       buf->f_fsid.val[0] ^= BTRFS_I(d_inode(dentry))->root->objectid >> 32;
-       buf->f_fsid.val[1] ^= BTRFS_I(d_inode(dentry))->root->objectid;
+       buf->f_fsid.val[0] ^=
+               BTRFS_I(d_inode(dentry))->root->root_key.objectid >> 32;
+       buf->f_fsid.val[1] ^=
+               BTRFS_I(d_inode(dentry))->root->root_key.objectid;
 
        return 0;
 }
 
                list_del_init(&root->dirty_list);
                free_extent_buffer(root->commit_root);
                root->commit_root = btrfs_root_node(root);
-               if (is_fstree(root->objectid))
+               if (is_fstree(root->root_key.objectid))
                        btrfs_unpin_free_ino(root);
                clear_btree_io_tree(&root->dirty_log_pages);
        }
        list_del_init(&root->root_list);
        spin_unlock(&fs_info->trans_lock);
 
-       btrfs_debug(fs_info, "cleaner removing %llu", root->objectid);
+       btrfs_debug(fs_info, "cleaner removing %llu", root->root_key.objectid);
 
        btrfs_kill_all_delayed_nodes(root);
 
 
        ),
 
        TP_fast_assign_btrfs(bi->root->fs_info,
-               __entry->root_obj       = bi->root->objectid;
+               __entry->root_obj       = bi->root->root_key.objectid;
                __entry->ino            = btrfs_ino(bi);
                __entry->isize          = bi->vfs_inode.i_size;
                __entry->disk_isize     = bi->disk_i_size;
 
        TP_fast_assign_btrfs(
                bi->root->fs_info,
-               __entry->root_obj       = bi->root->objectid;
+               __entry->root_obj       = bi->root->root_key.objectid;
                __entry->ino            = btrfs_ino(bi);
                __entry->isize          = bi->vfs_inode.i_size;
                __entry->disk_isize     = bi->disk_i_size;
        ),
 
        TP_fast_assign_btrfs(btrfs_sb(inode->i_sb),
-               __entry->rootid         = BTRFS_I(inode)->root->objectid;
+               __entry->rootid         =
+                       BTRFS_I(inode)->root->root_key.objectid;
                __entry->ino            = btrfs_ino(BTRFS_I(inode));
                __entry->start          = start;
                __entry->len            = len;
        ),
 
        TP_fast_assign_btrfs(root->fs_info,
-               __entry->refroot        = root->objectid;
+               __entry->refroot        = root->root_key.objectid;
                __entry->diff           = diff;
        ),
 
        ),
 
        TP_fast_assign_btrfs(root->fs_info,
-               __entry->refroot        = root->objectid;
+               __entry->refroot        = root->root_key.objectid;
                __entry->diff           = diff;
        ),
 
        ),
 
        TP_fast_assign_btrfs(root->fs_info,
-               __entry->refroot        = root->objectid;
+               __entry->refroot        = root->root_key.objectid;
                spin_lock(&root->qgroup_meta_rsv_lock);
                __entry->diff           = -(s64)root->qgroup_meta_rsv_pertrans;
                spin_unlock(&root->qgroup_meta_rsv_lock);
        ),
 
        TP_fast_assign_btrfs(root->fs_info,
-               __entry->root_objectid  = root->objectid;
+               __entry->root_objectid  = root->root_key.objectid;
                __entry->ino            = ino;
                __entry->mod            = mod;
        ),