OSDN Git Service

btrfs: make the fs root init functions static
[tomoyo/tomoyo-test1.git] / fs / btrfs / disk-io.c
index c6c9a6a..67e7b0c 100644 (file)
@@ -1130,6 +1130,7 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info,
                         u64 objectid)
 {
        bool dummy = test_bit(BTRFS_FS_STATE_DUMMY_FS_INFO, &fs_info->fs_state);
+       root->fs_info = fs_info;
        root->node = NULL;
        root->commit_root = NULL;
        root->state = 0;
@@ -1198,11 +1199,11 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info,
 }
 
 static struct btrfs_root *btrfs_alloc_root(struct btrfs_fs_info *fs_info,
-               gfp_t flags)
+                                          u64 objectid, gfp_t flags)
 {
        struct btrfs_root *root = kzalloc(sizeof(*root), flags);
        if (root)
-               root->fs_info = fs_info;
+               __setup_root(root, fs_info, objectid);
        return root;
 }
 
@@ -1215,12 +1216,11 @@ struct btrfs_root *btrfs_alloc_dummy_root(struct btrfs_fs_info *fs_info)
        if (!fs_info)
                return ERR_PTR(-EINVAL);
 
-       root = btrfs_alloc_root(fs_info, GFP_KERNEL);
+       root = btrfs_alloc_root(fs_info, BTRFS_ROOT_TREE_OBJECTID, GFP_KERNEL);
        if (!root)
                return ERR_PTR(-ENOMEM);
 
        /* We don't use the stripesize in selftest, set it as sectorsize */
-       __setup_root(root, fs_info, BTRFS_ROOT_TREE_OBJECTID);
        root->alloc_bytenr = 0;
 
        return root;
@@ -1244,12 +1244,11 @@ struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans,
         * context to avoid deadlock if reclaim happens.
         */
        nofs_flag = memalloc_nofs_save();
-       root = btrfs_alloc_root(fs_info, GFP_KERNEL);
+       root = btrfs_alloc_root(fs_info, objectid, GFP_KERNEL);
        memalloc_nofs_restore(nofs_flag);
        if (!root)
                return ERR_PTR(-ENOMEM);
 
-       __setup_root(root, fs_info, objectid);
        root->root_key.objectid = objectid;
        root->root_key.type = BTRFS_ROOT_ITEM_KEY;
        root->root_key.offset = 0;
@@ -1309,12 +1308,10 @@ static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans,
        struct btrfs_root *root;
        struct extent_buffer *leaf;
 
-       root = btrfs_alloc_root(fs_info, GFP_NOFS);
+       root = btrfs_alloc_root(fs_info, BTRFS_TREE_LOG_OBJECTID, GFP_NOFS);
        if (!root)
                return ERR_PTR(-ENOMEM);
 
-       __setup_root(root, fs_info, BTRFS_TREE_LOG_OBJECTID);
-
        root->root_key.objectid = BTRFS_TREE_LOG_OBJECTID;
        root->root_key.type = BTRFS_ROOT_ITEM_KEY;
        root->root_key.offset = BTRFS_TREE_LOG_OBJECTID;
@@ -1387,8 +1384,8 @@ int btrfs_add_log_tree(struct btrfs_trans_handle *trans,
        return 0;
 }
 
-static struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root,
-                                              struct btrfs_key *key)
+struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root,
+                                       struct btrfs_key *key)
 {
        struct btrfs_root *root;
        struct btrfs_fs_info *fs_info = tree_root->fs_info;
@@ -1401,14 +1398,12 @@ static struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root,
        if (!path)
                return ERR_PTR(-ENOMEM);
 
-       root = btrfs_alloc_root(fs_info, GFP_NOFS);
+       root = btrfs_alloc_root(fs_info, key->objectid, GFP_NOFS);
        if (!root) {
                ret = -ENOMEM;
                goto alloc_fail;
        }
 
-       __setup_root(root, fs_info, key->objectid);
-
        ret = btrfs_find_root(tree_root, key, path,
                              &root->root_item, &root->root_key);
        if (ret) {
@@ -1442,24 +1437,7 @@ alloc_fail:
        goto out;
 }
 
-struct btrfs_root *btrfs_read_fs_root(struct btrfs_root *tree_root,
-                                     struct btrfs_key *location)
-{
-       struct btrfs_root *root;
-
-       root = btrfs_read_tree_root(tree_root, location);
-       if (IS_ERR(root))
-               return root;
-
-       if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
-               set_bit(BTRFS_ROOT_REF_COWS, &root->state);
-               btrfs_check_and_init_root_item(&root->root_item);
-       }
-
-       return root;
-}
-
-int btrfs_init_fs_root(struct btrfs_root *root)
+static int btrfs_init_fs_root(struct btrfs_root *root)
 {
        int ret;
        struct btrfs_subvolume_writers *writers;
@@ -1479,6 +1457,11 @@ int btrfs_init_fs_root(struct btrfs_root *root)
        }
        root->subv_writers = writers;
 
+       if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) {
+               set_bit(BTRFS_ROOT_REF_COWS, &root->state);
+               btrfs_check_and_init_root_item(&root->root_item);
+       }
+
        btrfs_init_free_ino_ctl(root);
        spin_lock_init(&root->ino_cache_lock);
        init_waitqueue_head(&root->ino_cache_wait);
@@ -1505,8 +1488,8 @@ fail:
        return ret;
 }
 
-struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info,
-                                       u64 root_id)
+static struct btrfs_root *btrfs_lookup_fs_root(struct btrfs_fs_info *fs_info,
+                                              u64 root_id)
 {
        struct btrfs_root *root;
 
@@ -1574,7 +1557,7 @@ again:
                return root;
        }
 
-       root = btrfs_read_fs_root(fs_info->tree_root, location);
+       root = btrfs_read_tree_root(fs_info->tree_root, location);
        if (IS_ERR(root))
                return root;
 
@@ -2208,12 +2191,11 @@ static int btrfs_replay_log(struct btrfs_fs_info *fs_info,
                return -EIO;
        }
 
-       log_tree_root = btrfs_alloc_root(fs_info, GFP_KERNEL);
+       log_tree_root = btrfs_alloc_root(fs_info, BTRFS_TREE_LOG_OBJECTID,
+                                        GFP_KERNEL);
        if (!log_tree_root)
                return -ENOMEM;
 
-       __setup_root(log_tree_root, fs_info, BTRFS_TREE_LOG_OBJECTID);
-
        log_tree_root->node = read_tree_block(fs_info, bytenr,
                                              fs_info->generation + 1,
                                              level, NULL);
@@ -2645,8 +2627,12 @@ int __cold open_ctree(struct super_block *sb,
        int clear_free_space_tree = 0;
        int level;
 
-       tree_root = fs_info->tree_root = btrfs_alloc_root(fs_info, GFP_KERNEL);
-       chunk_root = fs_info->chunk_root = btrfs_alloc_root(fs_info, GFP_KERNEL);
+       tree_root = btrfs_alloc_root(fs_info, BTRFS_ROOT_TREE_OBJECTID,
+                                    GFP_KERNEL);
+       fs_info->tree_root = tree_root;
+       chunk_root = btrfs_alloc_root(fs_info, BTRFS_CHUNK_TREE_OBJECTID,
+                                     GFP_KERNEL);
+       fs_info->chunk_root = chunk_root;
        if (!tree_root || !chunk_root) {
                err = -ENOMEM;
                goto fail;
@@ -2824,8 +2810,6 @@ int __cold open_ctree(struct super_block *sb,
                goto fail_alloc;
        }
 
-       __setup_root(tree_root, fs_info, BTRFS_ROOT_TREE_OBJECTID);
-
        invalidate_bdev(fs_devices->latest_bdev);
 
        /*
@@ -3021,8 +3005,6 @@ int __cold open_ctree(struct super_block *sb,
        generation = btrfs_super_chunk_root_generation(disk_super);
        level = btrfs_super_chunk_root_level(disk_super);
 
-       __setup_root(chunk_root, fs_info, BTRFS_CHUNK_TREE_OBJECTID);
-
        chunk_root->node = read_tree_block(fs_info,
                                           btrfs_super_chunk_root(disk_super),
                                           generation, level, NULL);
@@ -3196,7 +3178,7 @@ int __cold open_ctree(struct super_block *sb,
        location.type = BTRFS_ROOT_ITEM_KEY;
        location.offset = 0;
 
-       fs_info->fs_root = btrfs_read_fs_root_no_name(fs_info, &location);
+       fs_info->fs_root = btrfs_get_fs_root(fs_info, &location, true);
        if (IS_ERR(fs_info->fs_root)) {
                err = PTR_ERR(fs_info->fs_root);
                btrfs_warn(fs_info, "failed to read fs tree: %d", err);