__insert_inode_hash(inode, h);
 }
 
-static inline u64 btrfs_ino(struct inode *inode)
+static inline u64 btrfs_ino(struct btrfs_inode *inode)
 {
-       u64 ino = BTRFS_I(inode)->location.objectid;
+       u64 ino = inode->location.objectid;
 
        /*
         * !ino: btree_inode
         * type == BTRFS_ROOT_ITEM_KEY: subvol dir
         */
-       if (!ino || BTRFS_I(inode)->location.type == BTRFS_ROOT_ITEM_KEY)
-               ino = inode->i_ino;
+       if (!ino || inode->location.type == BTRFS_ROOT_ITEM_KEY)
+               ino = inode->vfs_inode.i_ino;
        return ino;
 }
 
        struct btrfs_root *root = BTRFS_I(inode)->root;
 
        if (root == root->fs_info->tree_root &&
-           btrfs_ino(inode) != BTRFS_BTREE_INODE_OBJECTID)
+           btrfs_ino(BTRFS_I(inode)) != BTRFS_BTREE_INODE_OBJECTID)
                return true;
        if (BTRFS_I(inode)->location.objectid == BTRFS_FREE_INO_OBJECTID)
                return true;
 
                if (csum != *cb_sum) {
                        btrfs_info(BTRFS_I(inode)->root->fs_info,
                           "csum failed ino %llu extent %llu csum %u wanted %u mirror %d",
-                          btrfs_ino(inode), disk_start, csum, *cb_sum,
+                          btrfs_ino(BTRFS_I(inode)), disk_start, csum, *cb_sum,
                           cb->mirror_num);
                        ret = -EIO;
                        goto fail;
 
 {
        struct btrfs_inode *btrfs_inode = BTRFS_I(inode);
        struct btrfs_root *root = btrfs_inode->root;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(btrfs_inode);
        struct btrfs_delayed_node *node;
 
        node = READ_ONCE(btrfs_inode->delayed_node);
        struct btrfs_delayed_node *node;
        struct btrfs_inode *btrfs_inode = BTRFS_I(inode);
        struct btrfs_root *root = btrfs_inode->root;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(btrfs_inode);
        int ret;
 
 again:
                        node->bytes_reserved = num_bytes;
                        trace_btrfs_space_reservation(fs_info,
                                                      "delayed_inode",
-                                                     btrfs_ino(inode),
+                                                     btrfs_ino(BTRFS_I(inode)),
                                                      num_bytes, 1);
                }
                return ret;
         */
        if (!ret) {
                trace_btrfs_space_reservation(fs_info, "delayed_inode",
-                                             btrfs_ino(inode), num_bytes, 1);
+                                             btrfs_ino(BTRFS_I(inode)), num_bytes, 1);
                node->bytes_reserved = num_bytes;
        }
 
        if (release) {
                trace_btrfs_space_reservation(fs_info, "delalloc",
-                                             btrfs_ino(inode), num_bytes, 0);
+                                             btrfs_ino(BTRFS_I(inode)), num_bytes, 0);
                btrfs_block_rsv_release(fs_info, src_rsv, num_bytes);
        }
 
                goto release_node;
        }
 
-       delayed_item->key.objectid = btrfs_ino(dir);
+       delayed_item->key.objectid = btrfs_ino(BTRFS_I(dir));
        delayed_item->key.type = BTRFS_DIR_INDEX_KEY;
        delayed_item->key.offset = index;
 
        if (IS_ERR(node))
                return PTR_ERR(node);
 
-       item_key.objectid = btrfs_ino(dir);
+       item_key.objectid = btrfs_ino(BTRFS_I(dir));
        item_key.type = BTRFS_DIR_INDEX_KEY;
        item_key.offset = index;
 
 
        struct btrfs_disk_key disk_key;
        u32 data_size;
 
-       key.objectid = btrfs_ino(dir);
+       key.objectid = btrfs_ino(BTRFS_I(dir));
        key.type = BTRFS_DIR_ITEM_KEY;
        key.offset = btrfs_name_hash(name, name_len);
 
 
        len  = BTRFS_FID_SIZE_NON_CONNECTABLE;
        type = FILEID_BTRFS_WITHOUT_PARENT;
 
-       fid->objectid = btrfs_ino(inode);
+       fid->objectid = btrfs_ino(BTRFS_I(inode));
        fid->root_objectid = BTRFS_I(inode)->root->objectid;
        fid->gen = inode->i_generation;
 
        if (!path)
                return ERR_PTR(-ENOMEM);
 
-       if (btrfs_ino(dir) == BTRFS_FIRST_FREE_OBJECTID) {
+       if (btrfs_ino(BTRFS_I(dir)) == BTRFS_FIRST_FREE_OBJECTID) {
                key.objectid = root->root_key.objectid;
                key.type = BTRFS_ROOT_BACKREF_KEY;
                key.offset = (u64)-1;
                root = fs_info->tree_root;
        } else {
-               key.objectid = btrfs_ino(dir);
+               key.objectid = btrfs_ino(BTRFS_I(dir));
                key.type = BTRFS_INODE_REF_KEY;
                key.offset = (u64)-1;
        }
        if (!S_ISDIR(dir->i_mode))
                return -EINVAL;
 
-       ino = btrfs_ino(inode);
+       ino = btrfs_ino(BTRFS_I(inode));
 
        path = btrfs_alloc_path();
        if (!path)
                root = fs_info->tree_root;
        } else {
                key.objectid = ino;
-               key.offset = btrfs_ino(dir);
+               key.offset = btrfs_ino(BTRFS_I(dir));
                key.type = BTRFS_INODE_REF_KEY;
        }
 
 
        u64 num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
 
        trace_btrfs_space_reservation(fs_info, "orphan",
-                                     btrfs_ino(inode), num_bytes, 1);
+                                     btrfs_ino(BTRFS_I(inode)), num_bytes, 1);
        return btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
 }
 
        u64 num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
 
        trace_btrfs_space_reservation(fs_info, "orphan",
-                                     btrfs_ino(inode), num_bytes, 0);
+                                     btrfs_ino(BTRFS_I(inode)), num_bytes, 0);
        btrfs_block_rsv_release(fs_info, root->orphan_block_rsv, num_bytes);
 }
 
 
        if (to_reserve)
                trace_btrfs_space_reservation(fs_info, "delalloc",
-                                             btrfs_ino(inode), to_reserve, 1);
+                                             btrfs_ino(BTRFS_I(inode)), to_reserve, 1);
        if (release_extra)
                btrfs_block_rsv_release(fs_info, block_rsv,
                                btrfs_calc_trans_metadata_size(fs_info, 1));
        if (to_free) {
                btrfs_block_rsv_release(fs_info, block_rsv, to_free);
                trace_btrfs_space_reservation(fs_info, "delalloc",
-                                             btrfs_ino(inode), to_free, 0);
+                                             btrfs_ino(BTRFS_I(inode)), to_free, 0);
        }
        if (delalloc_lock)
                mutex_unlock(&BTRFS_I(inode)->delalloc_mutex);
                return;
 
        trace_btrfs_space_reservation(fs_info, "delalloc",
-                                     btrfs_ino(inode), to_free, 0);
+                                     btrfs_ino(BTRFS_I(inode)), to_free, 0);
 
        btrfs_block_rsv_release(fs_info, &fs_info->delalloc_block_rsv, to_free);
 }
 
        if (end >= PAGE_SIZE && (end % 2) == 0 && end != isize - 1) {
                btrfs_debug_rl(BTRFS_I(inode)->root->fs_info,
                    "%s: ino %llu isize %llu odd range [%llu,%llu]",
-                               caller, btrfs_ino(inode), isize, start, end);
+                               caller, btrfs_ino(BTRFS_I(inode)), isize, start, end);
        }
 }
 #else
 
        btrfs_info_rl_in_rcu(fs_info,
                "read error corrected: ino %llu off %llu (dev %s sector %llu)",
-                                 btrfs_ino(inode), start,
+                                 btrfs_ino(BTRFS_I(inode)), start,
                                  rcu_str_deref(dev->name), sector);
        btrfs_bio_counter_dec(fs_info);
        bio_put(bio);
         * lookup the last file extent.  We're not using i_size here
         * because there might be preallocation past i_size
         */
-       ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(inode), -1,
+       ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(BTRFS_I(inode)), -1,
                                       0);
        if (ret < 0) {
                btrfs_free_path(path);
        found_type = found_key.type;
 
        /* No extents, but there might be delalloc bits */
-       if (found_key.objectid != btrfs_ino(inode) ||
+       if (found_key.objectid != btrfs_ino(BTRFS_I(inode)) ||
            found_type != BTRFS_EXTENT_DATA_KEY) {
                /* have to trust i_size as the end */
                last = (u64)-1;
                         */
                        ret = btrfs_check_shared(trans, root->fs_info,
                                                 root->objectid,
-                                                btrfs_ino(inode), bytenr);
+                                                btrfs_ino(BTRFS_I(inode)), bytenr);
                        if (trans)
                                btrfs_end_transaction(trans);
                        if (ret < 0)
 
                                } else {
                                        btrfs_info_rl(fs_info,
                                                   "no csum found for inode %llu start %llu",
-                                              btrfs_ino(inode), offset);
+                                              btrfs_ino(BTRFS_I(inode)), offset);
                                }
                                item = NULL;
                                btrfs_release_path(path);
        } else {
                btrfs_err(fs_info,
                          "unknown file extent item type %d, inode %llu, offset %llu, root %llu",
-                         type, btrfs_ino(inode), extent_start,
+                         type, btrfs_ino(BTRFS_I(inode)), extent_start,
                          root->root_key.objectid);
        }
 }
 
        if (!defrag)
                return -ENOMEM;
 
-       defrag->ino = btrfs_ino(inode);
+       defrag->ino = btrfs_ino(BTRFS_I(inode));
        defrag->transid = transid;
        defrag->root = root->root_key.objectid;
 
        struct btrfs_file_extent_item *fi;
        struct btrfs_key key;
        struct btrfs_key new_key;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
        u64 search_start = start;
        u64 disk_bytenr = 0;
        u64 num_bytes = 0;
        int del_slot = 0;
        int recow;
        int ret;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
 
        path = btrfs_alloc_path();
        if (!path)
                return 0;
 
        btrfs_item_key_to_cpu(leaf, &key, slot);
-       if (key.objectid != btrfs_ino(inode) ||
+       if (key.objectid != btrfs_ino(BTRFS_I(inode)) ||
            key.type != BTRFS_EXTENT_DATA_KEY)
                return 0;
 
        if (btrfs_fs_incompat(fs_info, NO_HOLES))
                goto out;
 
-       key.objectid = btrfs_ino(inode);
+       key.objectid = btrfs_ino(BTRFS_I(inode));
        key.type = BTRFS_EXTENT_DATA_KEY;
        key.offset = offset;
 
        }
        btrfs_release_path(path);
 
-       ret = btrfs_insert_file_extent(trans, root, btrfs_ino(inode), offset,
+       ret = btrfs_insert_file_extent(trans, root, btrfs_ino(BTRFS_I(inode)), offset,
                                       0, 0, end - offset, 0, end - offset,
                                       0, 0, 0);
        if (ret)
 
 
        num_pages = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
 
-       if (btrfs_ino(inode) != BTRFS_FREE_INO_OBJECTID)
+       if (btrfs_ino(BTRFS_I(inode)) != BTRFS_FREE_INO_OBJECTID)
                check_crcs = 1;
 
        /* Make sure we can fit our crcs into the first page */
 
                struct btrfs_key key;
                size_t datasize;
 
-               key.objectid = btrfs_ino(inode);
+               key.objectid = btrfs_ino(BTRFS_I(inode));
                key.offset = start;
                key.type = BTRFS_EXTENT_DATA_KEY;
 
        int nocow;
        int check_prev = 1;
        bool nolock;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
 
        path = btrfs_alloc_path();
        if (!path) {
                goto out;
 
        if (!extent_inserted) {
-               ins.objectid = btrfs_ino(inode);
+               ins.objectid = btrfs_ino(BTRFS_I(inode));
                ins.offset = file_pos;
                ins.type = BTRFS_EXTENT_DATA_KEY;
 
        ins.offset = disk_num_bytes;
        ins.type = BTRFS_EXTENT_ITEM_KEY;
        ret = btrfs_alloc_reserved_file_extent(trans, root->root_key.objectid,
-                                              btrfs_ino(inode), file_pos,
+                                              btrfs_ino(BTRFS_I(inode)), file_pos,
                                               ram_bytes, &ins);
        /*
         * Release the reserved range from inode dirty range map, as it is
        u64 num_bytes;
 
        if (BTRFS_I(inode)->root->root_key.objectid == root_id &&
-           inum == btrfs_ino(inode))
+           inum == btrfs_ino(BTRFS_I(inode)))
                return 0;
 
        key.objectid = root_id;
        if (ret)
                goto out_free_path;
 again:
-       key.objectid = btrfs_ino(inode);
+       key.objectid = btrfs_ino(BTRFS_I(inode));
        key.type = BTRFS_EXTENT_DATA_KEY;
        key.offset = start;
 
        if (!path)
                goto out_kfree;
 
-       key.objectid = btrfs_ino(inode);
+       key.objectid = btrfs_ino(BTRFS_I(inode));
        key.type = BTRFS_EXTENT_DATA_KEY;
        key.offset = new->file_pos;
 
 
                btrfs_item_key_to_cpu(l, &key, slot);
 
-               if (key.objectid != btrfs_ino(inode))
+               if (key.objectid != btrfs_ino(BTRFS_I(inode)))
                        break;
                if (key.type != BTRFS_EXTENT_DATA_KEY)
                        break;
 zeroit:
        btrfs_warn_rl(BTRFS_I(inode)->root->fs_info,
                "csum failed ino %llu off %llu csum %u expected csum %u",
-                          btrfs_ino(inode), start, csum, csum_expected);
+                          btrfs_ino(BTRFS_I(inode)), start, csum, csum_expected);
        memset(kaddr + pgoff, 1, len);
        flush_dcache_page(page);
        kunmap_atomic(kaddr);
 
        /* insert an orphan item to track this unlinked/truncated file */
        if (insert >= 1) {
-               ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode));
+               ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(BTRFS_I(inode)));
                if (ret) {
                        atomic_dec(&root->orphan_inodes);
                        if (reserve) {
                atomic_dec(&root->orphan_inodes);
                if (trans)
                        ret = btrfs_del_orphan_item(trans, root,
-                                                   btrfs_ino(inode));
+                                                   btrfs_ino(BTRFS_I(inode)));
        }
 
        if (release_rsv)
                goto cache_acl;
 
        btrfs_item_key_to_cpu(leaf, &location, path->slots[0]);
-       if (location.objectid != btrfs_ino(inode))
+       if (location.objectid != btrfs_ino(BTRFS_I(inode)))
                goto cache_acl;
 
        ptr = btrfs_item_ptr_offset(leaf, path->slots[0]);
         * any xattrs or acls
         */
        maybe_acls = acls_after_inode_item(leaf, path->slots[0],
-                                          btrfs_ino(inode), &first_xattr_slot);
+                                          btrfs_ino(BTRFS_I(inode)), &first_xattr_slot);
        if (first_xattr_slot != -1) {
                path->slots[0] = first_xattr_slot;
                ret = btrfs_load_inode_props(inode, path);
                if (ret)
                        btrfs_err(fs_info,
                                  "error loading props for ino %llu (root %llu): %d",
-                                 btrfs_ino(inode),
+                                 btrfs_ino(BTRFS_I(inode)),
                                  root->root_key.objectid, ret);
        }
        btrfs_free_path(path);
        struct btrfs_dir_item *di;
        struct btrfs_key key;
        u64 index;
-       u64 ino = btrfs_ino(inode);
-       u64 dir_ino = btrfs_ino(dir);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
+       u64 dir_ino = btrfs_ino(BTRFS_I(dir));
 
        path = btrfs_alloc_path();
        if (!path) {
        struct btrfs_key key;
        u64 index;
        int ret;
-       u64 dir_ino = btrfs_ino(dir);
+       u64 dir_ino = btrfs_ino(BTRFS_I(dir));
 
        path = btrfs_alloc_path();
        if (!path)
 
        if (inode->i_size > BTRFS_EMPTY_DIR_SIZE)
                return -ENOTEMPTY;
-       if (btrfs_ino(inode) == BTRFS_FIRST_FREE_OBJECTID)
+       if (btrfs_ino(BTRFS_I(inode)) == BTRFS_FIRST_FREE_OBJECTID)
                return -EPERM;
 
        trans = __unlink_start_trans(dir);
        if (IS_ERR(trans))
                return PTR_ERR(trans);
 
-       if (unlikely(btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) {
+       if (unlikely(btrfs_ino(BTRFS_I(inode)) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) {
                err = btrfs_unlink_subvol(trans, root, dir,
                                          BTRFS_I(inode)->location.objectid,
                                          dentry->d_name.name,
        int extent_type = -1;
        int ret;
        int err = 0;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
        u64 bytes_deleted = 0;
        bool be_nice = 0;
        bool should_throttle = 0;
                return ret;
        }
 
-       ret = btrfs_insert_file_extent(trans, root, btrfs_ino(inode), offset,
+       ret = btrfs_insert_file_extent(trans, root, btrfs_ino(BTRFS_I(inode)), offset,
                                       0, 0, len, 0, len, 0, 0, 0);
        if (ret)
                btrfs_abort_transaction(trans, ret);
        trans->block_rsv = &fs_info->trans_block_rsv;
        if (!(root == fs_info->tree_root ||
              root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID))
-               btrfs_return_ino(root, btrfs_ino(inode));
+               btrfs_return_ino(root, btrfs_ino(BTRFS_I(inode)));
 
        btrfs_end_transaction(trans);
        btrfs_btree_balance_dirty(fs_info);
        if (!path)
                return -ENOMEM;
 
-       di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(dir), name,
+       di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(BTRFS_I(dir)), name,
                                    namelen, 0);
        if (IS_ERR(di))
                ret = PTR_ERR(di);
 
        leaf = path->nodes[0];
        ref = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_root_ref);
-       if (btrfs_root_ref_dirid(leaf, ref) != btrfs_ino(dir) ||
+       if (btrfs_root_ref_dirid(leaf, ref) != btrfs_ino(BTRFS_I(dir)) ||
            btrfs_root_ref_name_len(leaf, ref) != dentry->d_name.len)
                goto out;
 
        struct rb_node **p;
        struct rb_node *parent;
        struct rb_node *new = &BTRFS_I(inode)->rb_node;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
 
        if (inode_unhashed(inode))
                return;
                parent = *p;
                entry = rb_entry(parent, struct btrfs_inode, rb_node);
 
-               if (ino < btrfs_ino(&entry->vfs_inode))
+               if (ino < btrfs_ino(BTRFS_I(&entry->vfs_inode)))
                        p = &parent->rb_left;
-               else if (ino > btrfs_ino(&entry->vfs_inode))
+               else if (ino > btrfs_ino(BTRFS_I(&entry->vfs_inode)))
                        p = &parent->rb_right;
                else {
                        WARN_ON(!(entry->vfs_inode.i_state &
                prev = node;
                entry = rb_entry(node, struct btrfs_inode, rb_node);
 
-               if (objectid < btrfs_ino(&entry->vfs_inode))
+               if (objectid < btrfs_ino(BTRFS_I(&entry->vfs_inode)))
                        node = node->rb_left;
-               else if (objectid > btrfs_ino(&entry->vfs_inode))
+               else if (objectid > btrfs_ino(BTRFS_I(&entry->vfs_inode)))
                        node = node->rb_right;
                else
                        break;
        if (!node) {
                while (prev) {
                        entry = rb_entry(prev, struct btrfs_inode, rb_node);
-                       if (objectid <= btrfs_ino(&entry->vfs_inode)) {
+                       if (objectid <= btrfs_ino(BTRFS_I(&entry->vfs_inode))) {
                                node = prev;
                                break;
                        }
        }
        while (node) {
                entry = rb_entry(node, struct btrfs_inode, rb_node);
-               objectid = btrfs_ino(&entry->vfs_inode) + 1;
+               objectid = btrfs_ino(BTRFS_I(&entry->vfs_inode)) + 1;
                inode = igrab(&entry->vfs_inode);
                if (inode) {
                        spin_unlock(&root->inode_lock);
                if (btrfs_root_refs(&root->root_item) == 0)
                        return 1;
 
-               if (btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
+               if (btrfs_ino(BTRFS_I(inode)) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
                        return 1;
        }
        return 0;
 
        key.type = BTRFS_DIR_INDEX_KEY;
        key.offset = ctx->pos;
-       key.objectid = btrfs_ino(inode);
+       key.objectid = btrfs_ino(BTRFS_I(inode));
 
        ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
        if (ret < 0)
        struct extent_buffer *leaf;
        int ret;
 
-       key.objectid = btrfs_ino(inode);
+       key.objectid = btrfs_ino(BTRFS_I(inode));
        key.type = BTRFS_DIR_INDEX_KEY;
        key.offset = (u64)-1;
 
        leaf = path->nodes[0];
        btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]);
 
-       if (found_key.objectid != btrfs_ino(inode) ||
+       if (found_key.objectid != btrfs_ino(BTRFS_I(inode)) ||
            found_key.type != BTRFS_DIR_INDEX_KEY) {
                BTRFS_I(inode)->index_cnt = 2;
                goto out;
        if (ret)
                btrfs_err(fs_info,
                          "error inheriting props for ino %llu (root %llu): %d",
-                         btrfs_ino(inode), root->root_key.objectid, ret);
+                         btrfs_ino(BTRFS_I(inode)), root->root_key.objectid, ret);
 
        return inode;
 
        int ret = 0;
        struct btrfs_key key;
        struct btrfs_root *root = BTRFS_I(parent_inode)->root;
-       u64 ino = btrfs_ino(inode);
-       u64 parent_ino = btrfs_ino(parent_inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
+       u64 parent_ino = btrfs_ino(BTRFS_I(parent_inode));
 
        if (unlikely(ino == BTRFS_FIRST_FREE_OBJECTID)) {
                memcpy(&key, &BTRFS_I(inode)->root->root_key, sizeof(key));
                goto out_unlock;
 
        inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
-                               dentry->d_name.len, btrfs_ino(dir), objectid,
+                               dentry->d_name.len, btrfs_ino(BTRFS_I(dir)), objectid,
                                mode, &index);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                goto out_unlock;
 
        inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
-                               dentry->d_name.len, btrfs_ino(dir), objectid,
+                               dentry->d_name.len, btrfs_ino(BTRFS_I(dir)), objectid,
                                mode, &index);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                goto out_fail;
 
        inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
-                               dentry->d_name.len, btrfs_ino(dir), objectid,
+                               dentry->d_name.len, btrfs_ino(BTRFS_I(dir)), objectid,
                                S_IFDIR | mode, &index);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
        int err = 0;
        u64 extent_start = 0;
        u64 extent_end = 0;
-       u64 objectid = btrfs_ino(inode);
+       u64 objectid = btrfs_ino(BTRFS_I(inode));
        u32 found_type;
        struct btrfs_path *path = NULL;
        struct btrfs_root *root = BTRFS_I(inode)->root;
        write_unlock(&em_tree->lock);
 out:
 
-       trace_btrfs_get_extent(root, inode, em);
+       trace_btrfs_get_extent(root, BTRFS_I(inode), em);
 
        btrfs_free_path(path);
        if (trans) {
        if (!path)
                return -ENOMEM;
 
-       ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(inode),
+       ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(BTRFS_I(inode)),
                                       offset, 0);
        if (ret < 0)
                goto out;
        ret = 0;
        leaf = path->nodes[0];
        btrfs_item_key_to_cpu(leaf, &key, slot);
-       if (key.objectid != btrfs_ino(inode) ||
+       if (key.objectid != btrfs_ino(BTRFS_I(inode)) ||
            key.type != BTRFS_EXTENT_DATA_KEY) {
                /* not our file or wrong item type, must cow */
                goto out;
                goto out;
        }
 
-       ret = btrfs_cross_ref_exist(trans, root, btrfs_ino(inode),
+       ret = btrfs_cross_ref_exist(trans, root, btrfs_ino(BTRFS_I(inode)),
                                    key.offset - backref_offset, disk_bytenr);
        btrfs_end_transaction(trans);
        if (ret) {
        if (err)
                btrfs_warn(BTRFS_I(dip->inode)->root->fs_info,
                           "direct IO failed ino %llu rw %d,%u sector %#Lx len %u err no %d",
-                          btrfs_ino(dip->inode), bio_op(bio), bio->bi_opf,
+                          btrfs_ino(BTRFS_I(dip->inode)), bio_op(bio), bio->bi_opf,
                           (unsigned long long)bio->bi_iter.bi_sector,
                           bio->bi_iter.bi_size, err);
 
        if (test_bit(BTRFS_INODE_HAS_ORPHAN_ITEM,
                     &BTRFS_I(inode)->runtime_flags)) {
                btrfs_info(fs_info, "inode %llu still on the orphan list",
-                          btrfs_ino(inode));
+                          btrfs_ino(BTRFS_I(inode)));
                atomic_dec(&root->orphan_inodes);
        }
 
        struct inode *old_inode = old_dentry->d_inode;
        struct timespec ctime = current_time(old_inode);
        struct dentry *parent;
-       u64 old_ino = btrfs_ino(old_inode);
-       u64 new_ino = btrfs_ino(new_inode);
+       u64 old_ino = btrfs_ino(BTRFS_I(old_inode));
+       u64 new_ino = btrfs_ino(BTRFS_I(new_inode));
        u64 old_idx = 0;
        u64 new_idx = 0;
        u64 root_objectid;
                                             new_dentry->d_name.name,
                                             new_dentry->d_name.len,
                                             old_ino,
-                                            btrfs_ino(new_dir), old_idx);
+                                            btrfs_ino(BTRFS_I(new_dir)), old_idx);
                if (ret)
                        goto out_fail;
        }
                                             old_dentry->d_name.name,
                                             old_dentry->d_name.len,
                                             new_ino,
-                                            btrfs_ino(old_dir), new_idx);
+                                            btrfs_ino(BTRFS_I(old_dir)), new_idx);
                if (ret)
                        goto out_fail;
        }
        inode = btrfs_new_inode(trans, root, dir,
                                dentry->d_name.name,
                                dentry->d_name.len,
-                               btrfs_ino(dir),
+                               btrfs_ino(BTRFS_I(dir)),
                                objectid,
                                S_IFCHR | WHITEOUT_MODE,
                                &index);
        u64 index = 0;
        u64 root_objectid;
        int ret;
-       u64 old_ino = btrfs_ino(old_inode);
+       u64 old_ino = btrfs_ino(BTRFS_I(old_inode));
        bool log_pinned = false;
 
-       if (btrfs_ino(new_dir) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
+       if (btrfs_ino(BTRFS_I(new_dir)) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
                return -EPERM;
 
        /* we only allow rename subvolume link between subvolumes */
                return -EXDEV;
 
        if (old_ino == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID ||
-           (new_inode && btrfs_ino(new_inode) == BTRFS_FIRST_FREE_OBJECTID))
+           (new_inode && btrfs_ino(BTRFS_I(new_inode)) == BTRFS_FIRST_FREE_OBJECTID))
                return -ENOTEMPTY;
 
        if (S_ISDIR(old_inode->i_mode) && new_inode &&
                                             new_dentry->d_name.name,
                                             new_dentry->d_name.len,
                                             old_ino,
-                                            btrfs_ino(new_dir), index);
+                                            btrfs_ino(BTRFS_I(new_dir)), index);
                if (ret)
                        goto out_fail;
        }
        if (new_inode) {
                inode_inc_iversion(new_inode);
                new_inode->i_ctime = current_time(new_inode);
-               if (unlikely(btrfs_ino(new_inode) ==
+               if (unlikely(btrfs_ino(BTRFS_I(new_inode)) ==
                             BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) {
                        root_objectid = BTRFS_I(new_inode)->location.objectid;
                        ret = btrfs_unlink_subvol(trans, dest, new_dir,
                goto out_unlock;
 
        inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name,
-                               dentry->d_name.len, btrfs_ino(dir), objectid,
+                               dentry->d_name.len, btrfs_ino(BTRFS_I(dir)), objectid,
                                S_IFLNK|S_IRWXUGO, &index);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                err = -ENOMEM;
                goto out_unlock_inode;
        }
-       key.objectid = btrfs_ino(inode);
+       key.objectid = btrfs_ino(BTRFS_I(inode));
        key.offset = 0;
        key.type = BTRFS_EXTENT_DATA_KEY;
        datasize = btrfs_file_extent_calc_inline_size(name_len);
                goto out;
 
        inode = btrfs_new_inode(trans, root, dir, NULL, 0,
-                               btrfs_ino(dir), objectid, mode, &index);
+                               btrfs_ino(BTRFS_I(dir)), objectid, mode, &index);
        if (IS_ERR(inode)) {
                ret = PTR_ERR(inode);
                inode = NULL;
 
 
        ret = btrfs_add_root_ref(trans, fs_info,
                                 objectid, root->root_key.objectid,
-                                btrfs_ino(dir), index, name, namelen);
+                                btrfs_ino(BTRFS_I(dir)), index, name, namelen);
        BUG_ON(ret);
 
        ret = btrfs_uuid_tree_add(trans, fs_info, root_item->uuid,
        struct btrfs_file_extent_item *extent;
        int type;
        int ret;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
 
        path = btrfs_alloc_path();
        if (!path)
        int ret = 0;
        u64 flags = 0;
 
-       if (btrfs_ino(inode) != BTRFS_FIRST_FREE_OBJECTID)
+       if (btrfs_ino(BTRFS_I(inode)) != BTRFS_FIRST_FREE_OBJECTID)
                return -EINVAL;
 
        down_read(&fs_info->subvol_sem);
        if (ret)
                goto out;
 
-       if (btrfs_ino(inode) != BTRFS_FIRST_FREE_OBJECTID) {
+       if (btrfs_ino(BTRFS_I(inode)) != BTRFS_FIRST_FREE_OBJECTID) {
                ret = -EINVAL;
                goto out_drop_write;
        }
        if (err)
                goto out_dput;
 
-       if (btrfs_ino(inode) != BTRFS_FIRST_FREE_OBJECTID) {
+       if (btrfs_ino(BTRFS_I(inode)) != BTRFS_FIRST_FREE_OBJECTID) {
                err = -EINVAL;
                goto out_dput;
        }
        if (new_key->offset > 0)
                return -EOPNOTSUPP;
 
-       key.objectid = btrfs_ino(dst);
+       key.objectid = btrfs_ino(BTRFS_I(dst));
        key.type = BTRFS_EXTENT_DATA_KEY;
        key.offset = 0;
        ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
                                goto copy_inline_extent;
                }
                btrfs_item_key_to_cpu(path->nodes[0], &key, path->slots[0]);
-               if (key.objectid == btrfs_ino(dst) &&
+               if (key.objectid == btrfs_ino(BTRFS_I(dst)) &&
                    key.type == BTRFS_EXTENT_DATA_KEY) {
                        ASSERT(key.offset > 0);
                        return -EOPNOTSUPP;
                } else if (ret == 0) {
                        btrfs_item_key_to_cpu(path->nodes[0], &key,
                                              path->slots[0]);
-                       if (key.objectid == btrfs_ino(dst) &&
+                       if (key.objectid == btrfs_ino(BTRFS_I(dst)) &&
                            key.type == BTRFS_EXTENT_DATA_KEY)
                                return -EOPNOTSUPP;
                }
 
        path->reada = READA_FORWARD;
        /* clone data */
-       key.objectid = btrfs_ino(src);
+       key.objectid = btrfs_ino(BTRFS_I(src));
        key.type = BTRFS_EXTENT_DATA_KEY;
        key.offset = off;
 
 
                btrfs_item_key_to_cpu(leaf, &key, slot);
                if (key.type > BTRFS_EXTENT_DATA_KEY ||
-                   key.objectid != btrfs_ino(src))
+                   key.objectid != btrfs_ino(BTRFS_I(src)))
                        break;
 
                if (key.type == BTRFS_EXTENT_DATA_KEY) {
                        path->leave_spinning = 0;
 
                        memcpy(&new_key, &key, sizeof(new_key));
-                       new_key.objectid = btrfs_ino(inode);
+                       new_key.objectid = btrfs_ino(BTRFS_I(inode));
                        if (off <= key.offset)
                                new_key.offset = key.offset + destoff - off;
                        else
                                                        fs_info,
                                                        disko, diskl, 0,
                                                        root->root_key.objectid,
-                                                       btrfs_ino(inode),
+                                                       btrfs_ino(BTRFS_I(inode)),
                                                        new_key.offset - datao);
                                        if (ret) {
                                                btrfs_abort_transaction(trans,
 
        down_write(&fs_info->subvol_sem);
 
-       if (btrfs_ino(inode) != BTRFS_FIRST_FREE_OBJECTID) {
+       if (btrfs_ino(BTRFS_I(inode)) != BTRFS_FIRST_FREE_OBJECTID) {
                ret = -EINVAL;
                goto out;
        }
 
        if (unlikely(ret))
                btrfs_warn(root->fs_info,
                           "error applying prop %s to ino %llu (root %llu): %d",
-                          handler->xattr_name, btrfs_ino(inode),
+                          handler->xattr_name, btrfs_ino(BTRFS_I(inode)),
                           root->root_key.objectid, ret);
        else
                set_bit(BTRFS_INODE_HAS_PROPS, &BTRFS_I(inode)->runtime_flags);
 int btrfs_load_inode_props(struct inode *inode, struct btrfs_path *path)
 {
        struct btrfs_root *root = BTRFS_I(inode)->root;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
        int ret;
 
        ret = iterate_object_props(root, path, ino, inode_prop_iterator, inode);
 
                prev = node;
                entry = rb_entry(node, struct btrfs_inode, rb_node);
 
-               if (objectid < btrfs_ino(&entry->vfs_inode))
+               if (objectid < btrfs_ino(entry))
                        node = node->rb_left;
-               else if (objectid > btrfs_ino(&entry->vfs_inode))
+               else if (objectid > btrfs_ino(entry))
                        node = node->rb_right;
                else
                        break;
        if (!node) {
                while (prev) {
                        entry = rb_entry(prev, struct btrfs_inode, rb_node);
-                       if (objectid <= btrfs_ino(&entry->vfs_inode)) {
+                       if (objectid <= btrfs_ino(entry)) {
                                node = prev;
                                break;
                        }
                        return inode;
                }
 
-               objectid = btrfs_ino(&entry->vfs_inode) + 1;
+               objectid = btrfs_ino(entry) + 1;
                if (cond_resched_lock(&root->inode_lock))
                        goto again;
 
                return -ENOMEM;
 
        bytenr -= BTRFS_I(reloc_inode)->index_cnt;
-       ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(reloc_inode),
+       ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(BTRFS_I(reloc_inode)),
                                       bytenr, 0);
        if (ret < 0)
                goto out;
                        if (first) {
                                inode = find_next_inode(root, key.objectid);
                                first = 0;
-                       } else if (inode && btrfs_ino(inode) < key.objectid) {
+                       } else if (inode && btrfs_ino(BTRFS_I(inode)) < key.objectid) {
                                btrfs_add_delayed_iput(inode);
                                inode = find_next_inode(root, key.objectid);
                        }
-                       if (inode && btrfs_ino(inode) == key.objectid) {
+                       if (inode && btrfs_ino(BTRFS_I(inode)) == key.objectid) {
                                end = key.offset +
                                      btrfs_file_extent_num_bytes(leaf, fi);
                                WARN_ON(!IS_ALIGNED(key.offset,
                inode = find_next_inode(root, objectid);
                if (!inode)
                        break;
-               ino = btrfs_ino(inode);
+               ino = btrfs_ino(BTRFS_I(inode));
 
                if (ino > max_key->objectid) {
                        iput(inode);
 
 
        /* check if there is a file/dir which has the same name. */
        dir_item = btrfs_lookup_dir_item(NULL, parent_root, path,
-                                        btrfs_ino(parent_inode),
+                                        btrfs_ino(BTRFS_I(parent_inode)),
                                         dentry->d_name.name,
                                         dentry->d_name.len, 0);
        if (dir_item != NULL && !IS_ERR(dir_item)) {
         */
        ret = btrfs_add_root_ref(trans, fs_info, objectid,
                                 parent_root->root_key.objectid,
-                                btrfs_ino(parent_inode), index,
+                                btrfs_ino(BTRFS_I(parent_inode)), index,
                                 dentry->d_name.name, dentry->d_name.len);
        if (ret) {
                btrfs_abort_transaction(trans, ret);
 
         * file.  This must be done before the btrfs_drop_extents run
         * so we don't try to drop this extent.
         */
-       ret = btrfs_lookup_file_extent(trans, root, path, btrfs_ino(inode),
+       ret = btrfs_lookup_file_extent(trans, root, path, btrfs_ino(BTRFS_I(inode)),
                                       start, 0);
 
        if (ret == 0 &&
        btrfs_release_path(path);
 
        /* look for a conflicting sequence number */
-       di = btrfs_lookup_dir_index_item(trans, root, path, btrfs_ino(dir),
+       di = btrfs_lookup_dir_index_item(trans, root, path, btrfs_ino(BTRFS_I(dir)),
                                         ref_index, name, namelen, 0);
        if (di && !IS_ERR(di)) {
                ret = drop_one_dir_item(trans, root, path, dir, di);
        btrfs_release_path(path);
 
        /* look for a conflicing name */
-       di = btrfs_lookup_dir_item(trans, root, path, btrfs_ino(dir),
+       di = btrfs_lookup_dir_item(trans, root, path, btrfs_ino(BTRFS_I(dir)),
                                   name, namelen, 0);
        if (di && !IS_ERR(di)) {
                ret = drop_one_dir_item(trans, root, path, dir, di);
                        goto out;
 
                /* if we already have a perfect match, we're done */
-               if (!inode_in_dir(root, path, btrfs_ino(dir), btrfs_ino(inode),
+               if (!inode_in_dir(root, path, btrfs_ino(BTRFS_I(dir)), btrfs_ino(BTRFS_I(inode)),
                                  ref_index, name, namelen)) {
                        /*
                         * look for a conflicting back reference in the
        unsigned int nlink = 0;
        u32 item_size;
        u32 cur_offset = 0;
-       u64 inode_objectid = btrfs_ino(inode);
+       u64 inode_objectid = btrfs_ino(BTRFS_I(inode));
        u64 offset = 0;
        unsigned long ptr;
        struct btrfs_inode_extref *extref;
        unsigned long ptr;
        unsigned long ptr_end;
        int name_len;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
 
        key.objectid = ino;
        key.type = BTRFS_INODE_REF_KEY;
        struct btrfs_path *path;
        int ret;
        u64 nlink = 0;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
 
        path = btrfs_alloc_path();
        if (!path)
        int ret;
        int err = 0;
        int bytes_del = 0;
-       u64 dir_ino = btrfs_ino(dir);
+       u64 dir_ino = btrfs_ino(BTRFS_I(dir));
 
        if (BTRFS_I(dir)->logged_trans < trans->transid)
                return 0;
        log = root->log_root;
        mutex_lock(&BTRFS_I(inode)->log_mutex);
 
-       ret = btrfs_del_inode_ref(trans, log, name, name_len, btrfs_ino(inode),
+       ret = btrfs_del_inode_ref(trans, log, name, name_len, btrfs_ino(BTRFS_I(inode)),
                                  dirid, &index);
        mutex_unlock(&BTRFS_I(inode)->log_mutex);
        if (ret == -ENOSPC) {
        int nritems;
        u64 first_offset = min_offset;
        u64 last_offset = (u64)-1;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
 
        log = root->log_root;
 
                        src_path->slots[0]--;
                src = src_path->nodes[0];
                btrfs_item_key_to_cpu(src, &key, src_path->slots[0]);
-               if (key.objectid != btrfs_ino(inode) ||
+               if (key.objectid != btrfs_ino(BTRFS_I(inode)) ||
                    key.type != BTRFS_EXTENT_DATA_KEY)
                        goto fill_holes;
                extent = btrfs_item_ptr(src, src_path->slots[0],
                btrfs_item_key_to_cpu(src, &key, i);
                if (!btrfs_comp_cpu_keys(&key, &last_key))
                        done = true;
-               if (key.objectid != btrfs_ino(inode) ||
+               if (key.objectid != btrfs_ino(BTRFS_I(inode)) ||
                    key.type != BTRFS_EXTENT_DATA_KEY) {
                        i++;
                        continue;
                }
                offset = *last_extent;
                len = key.offset - *last_extent;
-               ret = btrfs_insert_file_extent(trans, log, btrfs_ino(inode),
+               ret = btrfs_insert_file_extent(trans, log, btrfs_ino(BTRFS_I(inode)),
                                               offset, 0, 0, len, 0, len, 0,
                                               0, 0);
                if (ret)
                return ret;
 
        if (!extent_inserted) {
-               key.objectid = btrfs_ino(inode);
+               key.objectid = btrfs_ino(BTRFS_I(inode));
                key.type = BTRFS_EXTENT_DATA_KEY;
                key.offset = em->start;
 
        struct btrfs_key key;
        int ret;
 
-       key.objectid = btrfs_ino(inode);
+       key.objectid = btrfs_ino(BTRFS_I(inode));
        key.type = BTRFS_INODE_ITEM_KEY;
        key.offset = 0;
 
 {
        int ret;
        struct btrfs_key key;
-       const u64 ino = btrfs_ino(inode);
+       const u64 ino = btrfs_ino(BTRFS_I(inode));
        int ins_nr = 0;
        int start_slot = 0;
 
        u64 hole_size;
        struct extent_buffer *leaf;
        struct btrfs_root *log = root->log_root;
-       const u64 ino = btrfs_ino(inode);
+       const u64 ino = btrfs_ino(BTRFS_I(inode));
        const u64 i_size = i_size_read(inode);
 
        if (!btrfs_fs_incompat(fs_info, NO_HOLES))
        int ins_start_slot = 0;
        int ins_nr;
        bool fast_search = false;
-       u64 ino = btrfs_ino(inode);
+       u64 ino = btrfs_ino(BTRFS_I(inode));
        struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
        u64 logged_isize = 0;
        bool need_log_inode_item = true;
                                err = ret;
                                goto out_unlock;
                        } else if (ret > 0 && ctx &&
-                                  other_ino != btrfs_ino(ctx->inode)) {
+                                  other_ino != btrfs_ino(BTRFS_I(ctx->inode))) {
                                struct btrfs_key inode_key;
                                struct inode *other_inode;
 
                btrfs_free_path(path);
                return -ENOMEM;
        }
-       dir_elem->ino = btrfs_ino(start_inode);
+       dir_elem->ino = btrfs_ino(BTRFS_I(start_inode));
        list_add_tail(&dir_elem->list, &dir_list);
 
        while (!list_empty(&dir_list)) {
        struct btrfs_path *path;
        struct btrfs_key key;
        struct btrfs_root *root = BTRFS_I(inode)->root;
-       const u64 ino = btrfs_ino(inode);
+       const u64 ino = btrfs_ino(BTRFS_I(inode));
 
        path = btrfs_alloc_path();
        if (!path)
 
                return -ENOMEM;
 
        /* lookup the xattr by name */
-       di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode), name,
+       di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(BTRFS_I(inode)), name,
                                strlen(name), 0);
        if (!di) {
                ret = -ENODATA;
        path->skip_release_on_error = 1;
 
        if (!value) {
-               di = btrfs_lookup_xattr(trans, root, path, btrfs_ino(inode),
+               di = btrfs_lookup_xattr(trans, root, path, btrfs_ino(BTRFS_I(inode)),
                                        name, name_len, -1);
                if (!di && (flags & XATTR_REPLACE))
                        ret = -ENODATA;
         */
        if (flags & XATTR_REPLACE) {
                ASSERT(inode_is_locked(inode));
-               di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode),
+               di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(BTRFS_I(inode)),
                                        name, name_len, 0);
                if (!di)
                        ret = -ENODATA;
                di = NULL;
        }
 
-       ret = btrfs_insert_xattr_item(trans, root, path, btrfs_ino(inode),
+       ret = btrfs_insert_xattr_item(trans, root, path, btrfs_ino(BTRFS_I(inode)),
                                      name, name_len, value, size);
        if (ret == -EOVERFLOW) {
                /*
         * NOTE: we set key.offset = 0; because we want to start with the
         * first xattr that we find and walk forward
         */
-       key.objectid = btrfs_ino(inode);
+       key.objectid = btrfs_ino(BTRFS_I(inode));
        key.type = BTRFS_XATTR_ITEM_KEY;
        key.offset = 0;
 
 
 
 TRACE_EVENT_CONDITION(btrfs_get_extent,
 
-       TP_PROTO(struct btrfs_root *root, struct inode *inode,
+       TP_PROTO(struct btrfs_root *root, struct btrfs_inode *inode,
                 struct extent_map *map),
 
        TP_ARGS(root, inode, map),