use a different inode number for subvols than the root root dir
authorChris Mason <chris.mason@oracle.com>
Wed, 11 Apr 2007 12:58:53 +0000 (08:58 -0400)
committerDavid Woodhouse <dwmw2@hera.kernel.org>
Wed, 11 Apr 2007 12:58:53 +0000 (08:58 -0400)
ctree.h
mkfs.c

diff --git a/ctree.h b/ctree.h
index 6247894..8d4ba19 100644 (file)
--- a/ctree.h
+++ b/ctree.h
@@ -11,7 +11,8 @@ struct btrfs_trans_handle;
 #define BTRFS_ROOT_TREE_OBJECTID 1ULL
 #define BTRFS_EXTENT_TREE_OBJECTID 2ULL
 #define BTRFS_FS_TREE_OBJECTID 3ULL
-#define BTRFS_FIRST_FREE_OBJECTID 4ULL
+#define BTRFS_ROOT_TREE_DIR_OBJECTID 4ULL
+#define BTRFS_FIRST_FREE_OBJECTID 5ULL
 
 /*
  * we can actually store much bigger names, but lets not confuse the rest
diff --git a/mkfs.c b/mkfs.c
index f32aa93..8148259 100644 (file)
--- a/mkfs.c
+++ b/mkfs.c
@@ -22,21 +22,16 @@ static inline int ioctl(int fd, int define, u64 *size) { return 0; }
 #endif
 
 static int __make_root_dir(struct btrfs_trans_handle *trans,
-                          struct btrfs_root *root)
+                          struct btrfs_root *root, u64 objectid)
 {
        int ret;
        char buf[8];
-       u64 objectid;
        struct btrfs_key inode_map;
        struct btrfs_inode_item inode_item;
 
        buf[0] = '.';
        buf[1] = '.';
 
-       ret = btrfs_find_free_objectid(trans, root, 1, &objectid);
-       if (ret)
-               goto error;
-
        inode_map.objectid = objectid;
        inode_map.flags = 0;
        btrfs_set_key_type(&inode_map, BTRFS_INODE_ITEM_KEY);
@@ -44,7 +39,7 @@ static int __make_root_dir(struct btrfs_trans_handle *trans,
 
        memset(&inode_item, 0, sizeof(inode_item));
        btrfs_set_inode_generation(&inode_item, root->fs_info->generation);
-       btrfs_set_inode_size(&inode_item, 3);
+       btrfs_set_inode_size(&inode_item, 6);
        btrfs_set_inode_nlink(&inode_item, 1);
        btrfs_set_inode_nblocks(&inode_item, 1);
        btrfs_set_inode_mode(&inode_item, S_IFDIR | 0555);
@@ -83,10 +78,11 @@ static int make_root_dir(int fd) {
                return -1;
        }
        trans = btrfs_start_transaction(root, 1);
-       ret = __make_root_dir(trans, root->fs_info->tree_root);
+       ret = __make_root_dir(trans, root->fs_info->tree_root,
+                             BTRFS_ROOT_TREE_DIR_OBJECTID);
        if (ret)
                goto err;
-       ret = __make_root_dir(trans, root);
+       ret = __make_root_dir(trans, root, BTRFS_FIRST_FREE_OBJECTID);
        if (ret)
                goto err;
        memcpy(&location, &root->fs_info->fs_root->root_key, sizeof(location));