aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorMiao Xie <miaox@cn.fujitsu.com>2013-05-15 03:48:20 -0400
committerJosef Bacik <jbacik@fusionio.com>2013-06-14 11:29:38 -0400
commitb0feb9d96e71a88d7eec56f41b8f23e92af889b0 (patch)
treee808deeb4f3b33636d6481ff1bc88ae269880fa3 /fs/btrfs/disk-io.c
parentcb517eabba4f109810dba2e5f37b0dcf22103065 (diff)
Btrfs: introduce grab/put functions for the root of the fs/file tree
The grab/put funtions will be used in the next patch, which need grab the root object and ensure it is not freed. We use reference counter instead of the srcu lock is to aovid blocking the memory reclaim task, which invokes synchronize_srcu(). Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r--fs/btrfs/disk-io.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index c65a5aac1e45..90b643e07f3c 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1216,6 +1216,7 @@ static void __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize,
1216 atomic_set(&root->log_writers, 0); 1216 atomic_set(&root->log_writers, 0);
1217 atomic_set(&root->log_batch, 0); 1217 atomic_set(&root->log_batch, 0);
1218 atomic_set(&root->orphan_inodes, 0); 1218 atomic_set(&root->orphan_inodes, 0);
1219 atomic_set(&root->refs, 1);
1219 root->log_transid = 0; 1220 root->log_transid = 0;
1220 root->last_log_commit = 0; 1221 root->last_log_commit = 0;
1221 extent_io_tree_init(&root->dirty_log_pages, 1222 extent_io_tree_init(&root->dirty_log_pages,
@@ -2052,7 +2053,7 @@ static void del_fs_roots(struct btrfs_fs_info *fs_info)
2052 } else { 2053 } else {
2053 free_extent_buffer(gang[0]->node); 2054 free_extent_buffer(gang[0]->node);
2054 free_extent_buffer(gang[0]->commit_root); 2055 free_extent_buffer(gang[0]->commit_root);
2055 kfree(gang[0]); 2056 btrfs_put_fs_root(gang[0]);
2056 } 2057 }
2057 } 2058 }
2058 2059
@@ -3417,7 +3418,7 @@ static void free_fs_root(struct btrfs_root *root)
3417 kfree(root->free_ino_ctl); 3418 kfree(root->free_ino_ctl);
3418 kfree(root->free_ino_pinned); 3419 kfree(root->free_ino_pinned);
3419 kfree(root->name); 3420 kfree(root->name);
3420 kfree(root); 3421 btrfs_put_fs_root(root);
3421} 3422}
3422 3423
3423void btrfs_free_fs_root(struct btrfs_root *root) 3424void btrfs_free_fs_root(struct btrfs_root *root)