aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorYan Zheng <zheng.yan@oracle.com>2009-07-30 09:40:40 -0400
committerChris Mason <chris.mason@oracle.com>2009-07-30 09:40:40 -0400
commit276e680d192a67d222fcea51af37b056feffb665 (patch)
tree137bae016c30f24e7fafcbc8073e3411b732eb31 /fs/btrfs/disk-io.c
parentf25784b35f590c81d5fb8245a8cd45e1afb6f1b2 (diff)
Btrfs: preserve commit_root for async caching
The async block group caching code uses the commit_root pointer to get a stable version of the extent allocation tree for scanning. This copy of the tree root isn't going to change and it significantly reduces the complexity of the scanning code. During a commit, we have a loop where we update the extent allocation tree root. We need to loop because updating the root pointer in the tree of tree roots may allocate blocks which may change the extent allocation tree. Right now the commit_root pointer is changed inside this loop. It is more correct to change the commit_root pointer only after all the looping is done. Signed-off-by: Yan Zheng <zheng.yan@oracle.com> Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r--fs/btrfs/disk-io.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 3a9b88759880..3cf4cfa575c8 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -907,7 +907,6 @@ static int __setup_root(u32 nodesize, u32 leafsize, u32 sectorsize,
907 spin_lock_init(&root->inode_lock); 907 spin_lock_init(&root->inode_lock);
908 mutex_init(&root->objectid_mutex); 908 mutex_init(&root->objectid_mutex);
909 mutex_init(&root->log_mutex); 909 mutex_init(&root->log_mutex);
910 init_rwsem(&root->commit_root_sem);
911 init_waitqueue_head(&root->log_writer_wait); 910 init_waitqueue_head(&root->log_writer_wait);
912 init_waitqueue_head(&root->log_commit_wait[0]); 911 init_waitqueue_head(&root->log_commit_wait[0]);
913 init_waitqueue_head(&root->log_commit_wait[1]); 912 init_waitqueue_head(&root->log_commit_wait[1]);
@@ -1624,6 +1623,7 @@ struct btrfs_root *open_ctree(struct super_block *sb,
1624 mutex_init(&fs_info->cleaner_mutex); 1623 mutex_init(&fs_info->cleaner_mutex);
1625 mutex_init(&fs_info->volume_mutex); 1624 mutex_init(&fs_info->volume_mutex);
1626 mutex_init(&fs_info->tree_reloc_mutex); 1625 mutex_init(&fs_info->tree_reloc_mutex);
1626 init_rwsem(&fs_info->extent_commit_sem);
1627 1627
1628 btrfs_init_free_cluster(&fs_info->meta_alloc_cluster); 1628 btrfs_init_free_cluster(&fs_info->meta_alloc_cluster);
1629 btrfs_init_free_cluster(&fs_info->data_alloc_cluster); 1629 btrfs_init_free_cluster(&fs_info->data_alloc_cluster);