summaryrefslogtreecommitdiff
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
authorYan Zheng <zheng.yan@oracle.com>2009-07-30 13:40:40 (GMT)
committerChris Mason <chris.mason@oracle.com>2009-07-30 13:40:40 (GMT)
commit276e680d192a67d222fcea51af37b056feffb665 (patch)
tree137bae016c30f24e7fafcbc8073e3411b732eb31 /fs/btrfs/extent-tree.c
parentf25784b35f590c81d5fb8245a8cd45e1afb6f1b2 (diff)
downloadlinux-276e680d192a67d222fcea51af37b056feffb665.tar.xz
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/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index fadf69a..2fe21fa 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -267,7 +267,7 @@ static int caching_kthread(void *data)
last = max_t(u64, block_group->key.objectid, BTRFS_SUPER_INFO_OFFSET);
again:
/* need to make sure the commit_root doesn't disappear */
- down_read(&fs_info->extent_root->commit_root_sem);
+ down_read(&fs_info->extent_commit_sem);
/*
* We don't want to deadlock with somebody trying to allocate a new
@@ -304,7 +304,7 @@ again:
if (need_resched()) {
btrfs_release_path(fs_info->extent_root, path);
- up_read(&fs_info->extent_root->commit_root_sem);
+ up_read(&fs_info->extent_commit_sem);
cond_resched();
goto again;
}
@@ -345,7 +345,7 @@ next:
err:
btrfs_free_path(path);
- up_read(&fs_info->extent_root->commit_root_sem);
+ up_read(&fs_info->extent_commit_sem);
atomic_dec(&block_group->space_info->caching_threads);
wake_up(&block_group->caching_q);