aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ctree.h
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/ctree.h
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/ctree.h')
-rw-r--r--fs/btrfs/ctree.h4
1 files changed, 1 insertions, 3 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 17ad92c29cfd..38eeb6c49c8a 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -827,6 +827,7 @@ struct btrfs_fs_info {
827 struct mutex drop_mutex; 827 struct mutex drop_mutex;
828 struct mutex volume_mutex; 828 struct mutex volume_mutex;
829 struct mutex tree_reloc_mutex; 829 struct mutex tree_reloc_mutex;
830 struct rw_semaphore extent_commit_sem;
830 831
831 /* 832 /*
832 * this protects the ordered operations list only while we are 833 * this protects the ordered operations list only while we are
@@ -961,9 +962,6 @@ struct btrfs_root {
961 /* the node lock is held while changing the node pointer */ 962 /* the node lock is held while changing the node pointer */
962 spinlock_t node_lock; 963 spinlock_t node_lock;
963 964
964 /* taken when updating the commit root */
965 struct rw_semaphore commit_root_sem;
966
967 struct extent_buffer *commit_root; 965 struct extent_buffer *commit_root;
968 struct btrfs_root *log_root; 966 struct btrfs_root *log_root;
969 struct btrfs_root *reloc_root; 967 struct btrfs_root *reloc_root;