aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@redhat.com>2009-04-03 10:14:18 -0400
committerChris Mason <chris.mason@oracle.com>2009-04-03 10:14:18 -0400
commit04018de5d41e6490840de9399e029fd30e78576f (patch)
tree4fcb979cee830884ca0d3f9636cc70ed17b3364a
parent6226cb0a5ea3f6289883753c15d53f48a6c6bbfb (diff)
Btrfs: kill the pinned_mutex
This patch removes the pinned_mutex. The extent io map has an internal tree lock that protects the tree itself, and since we only copy the extent io map when we are committing the transaction we don't need it there. We also don't need it when caching the block group since searching through the tree is also protected by the internal map spin lock. Signed-off-by: Josef Bacik <jbacik@redhat.com>
-rw-r--r--fs/btrfs/ctree.h1
-rw-r--r--fs/btrfs/disk-io.c1
-rw-r--r--fs/btrfs/extent-tree.c11
-rw-r--r--fs/btrfs/tree-log.c4
4 files changed, 1 insertions, 16 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 527744561f93..aaa049b8e134 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -728,7 +728,6 @@ struct btrfs_fs_info {
728 struct mutex tree_log_mutex; 728 struct mutex tree_log_mutex;
729 struct mutex transaction_kthread_mutex; 729 struct mutex transaction_kthread_mutex;
730 struct mutex cleaner_mutex; 730 struct mutex cleaner_mutex;
731 struct mutex pinned_mutex;
732 struct mutex chunk_mutex; 731 struct mutex chunk_mutex;
733 struct mutex drop_mutex; 732 struct mutex drop_mutex;
734 struct mutex volume_mutex; 733 struct mutex volume_mutex;
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 1747dfd18654..ea59ebfa505d 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -1647,7 +1647,6 @@ struct btrfs_root *open_ctree(struct super_block *sb,
1647 mutex_init(&fs_info->ordered_operations_mutex); 1647 mutex_init(&fs_info->ordered_operations_mutex);
1648 mutex_init(&fs_info->tree_log_mutex); 1648 mutex_init(&fs_info->tree_log_mutex);
1649 mutex_init(&fs_info->drop_mutex); 1649 mutex_init(&fs_info->drop_mutex);
1650 mutex_init(&fs_info->pinned_mutex);
1651 mutex_init(&fs_info->chunk_mutex); 1650 mutex_init(&fs_info->chunk_mutex);
1652 mutex_init(&fs_info->transaction_kthread_mutex); 1651 mutex_init(&fs_info->transaction_kthread_mutex);
1653 mutex_init(&fs_info->cleaner_mutex); 1652 mutex_init(&fs_info->cleaner_mutex);
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 6880a271975a..15d62a9214b7 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -166,7 +166,6 @@ static int add_new_free_space(struct btrfs_block_group_cache *block_group,
166 u64 extent_start, extent_end, size; 166 u64 extent_start, extent_end, size;
167 int ret; 167 int ret;
168 168
169 mutex_lock(&info->pinned_mutex);
170 while (start < end) { 169 while (start < end) {
171 ret = find_first_extent_bit(&info->pinned_extents, start, 170 ret = find_first_extent_bit(&info->pinned_extents, start,
172 &extent_start, &extent_end, 171 &extent_start, &extent_end,
@@ -192,7 +191,6 @@ static int add_new_free_space(struct btrfs_block_group_cache *block_group,
192 ret = btrfs_add_free_space(block_group, start, size); 191 ret = btrfs_add_free_space(block_group, start, size);
193 BUG_ON(ret); 192 BUG_ON(ret);
194 } 193 }
195 mutex_unlock(&info->pinned_mutex);
196 194
197 return 0; 195 return 0;
198} 196}
@@ -2047,7 +2045,6 @@ int btrfs_update_pinned_extents(struct btrfs_root *root,
2047 struct btrfs_block_group_cache *cache; 2045 struct btrfs_block_group_cache *cache;
2048 struct btrfs_fs_info *fs_info = root->fs_info; 2046 struct btrfs_fs_info *fs_info = root->fs_info;
2049 2047
2050 WARN_ON(!mutex_is_locked(&root->fs_info->pinned_mutex));
2051 if (pin) { 2048 if (pin) {
2052 set_extent_dirty(&fs_info->pinned_extents, 2049 set_extent_dirty(&fs_info->pinned_extents,
2053 bytenr, bytenr + num - 1, GFP_NOFS); 2050 bytenr, bytenr + num - 1, GFP_NOFS);
@@ -2055,7 +2052,6 @@ int btrfs_update_pinned_extents(struct btrfs_root *root,
2055 clear_extent_dirty(&fs_info->pinned_extents, 2052 clear_extent_dirty(&fs_info->pinned_extents,
2056 bytenr, bytenr + num - 1, GFP_NOFS); 2053 bytenr, bytenr + num - 1, GFP_NOFS);
2057 } 2054 }
2058 mutex_unlock(&root->fs_info->pinned_mutex);
2059 2055
2060 while (num > 0) { 2056 while (num > 0) {
2061 cache = btrfs_lookup_block_group(fs_info, bytenr); 2057 cache = btrfs_lookup_block_group(fs_info, bytenr);
@@ -2127,7 +2123,6 @@ int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy)
2127 struct extent_io_tree *pinned_extents = &root->fs_info->pinned_extents; 2123 struct extent_io_tree *pinned_extents = &root->fs_info->pinned_extents;
2128 int ret; 2124 int ret;
2129 2125
2130 mutex_lock(&root->fs_info->pinned_mutex);
2131 while (1) { 2126 while (1) {
2132 ret = find_first_extent_bit(pinned_extents, last, 2127 ret = find_first_extent_bit(pinned_extents, last,
2133 &start, &end, EXTENT_DIRTY); 2128 &start, &end, EXTENT_DIRTY);
@@ -2136,7 +2131,6 @@ int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy)
2136 set_extent_dirty(copy, start, end, GFP_NOFS); 2131 set_extent_dirty(copy, start, end, GFP_NOFS);
2137 last = end + 1; 2132 last = end + 1;
2138 } 2133 }
2139 mutex_unlock(&root->fs_info->pinned_mutex);
2140 return 0; 2134 return 0;
2141} 2135}
2142 2136
@@ -2149,7 +2143,6 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
2149 int ret; 2143 int ret;
2150 2144
2151 while (1) { 2145 while (1) {
2152 mutex_lock(&root->fs_info->pinned_mutex);
2153 ret = find_first_extent_bit(unpin, 0, &start, &end, 2146 ret = find_first_extent_bit(unpin, 0, &start, &end,
2154 EXTENT_DIRTY); 2147 EXTENT_DIRTY);
2155 if (ret) 2148 if (ret)
@@ -2163,7 +2156,6 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
2163 2156
2164 cond_resched(); 2157 cond_resched();
2165 } 2158 }
2166 mutex_unlock(&root->fs_info->pinned_mutex);
2167 return ret; 2159 return ret;
2168} 2160}
2169 2161
@@ -2205,7 +2197,6 @@ static int pin_down_bytes(struct btrfs_trans_handle *trans,
2205 free_extent_buffer(buf); 2197 free_extent_buffer(buf);
2206pinit: 2198pinit:
2207 btrfs_set_path_blocking(path); 2199 btrfs_set_path_blocking(path);
2208 mutex_lock(&root->fs_info->pinned_mutex);
2209 /* unlocks the pinned mutex */ 2200 /* unlocks the pinned mutex */
2210 btrfs_update_pinned_extents(root, bytenr, num_bytes, 1); 2201 btrfs_update_pinned_extents(root, bytenr, num_bytes, 1);
2211 2202
@@ -2511,8 +2502,6 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans,
2511 */ 2502 */
2512 if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID && 2503 if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID &&
2513 owner_objectid < BTRFS_FIRST_FREE_OBJECTID) { 2504 owner_objectid < BTRFS_FIRST_FREE_OBJECTID) {
2514 mutex_lock(&root->fs_info->pinned_mutex);
2515
2516 /* unlocks the pinned mutex */ 2505 /* unlocks the pinned mutex */
2517 btrfs_update_pinned_extents(root, bytenr, num_bytes, 1); 2506 btrfs_update_pinned_extents(root, bytenr, num_bytes, 1);
2518 update_reserved_extents(root, bytenr, num_bytes, 0); 2507 update_reserved_extents(root, bytenr, num_bytes, 0);
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index fc9b87a7975b..2871609641f5 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -262,11 +262,9 @@ static int process_one_buffer(struct btrfs_root *log,
262 struct extent_buffer *eb, 262 struct extent_buffer *eb,
263 struct walk_control *wc, u64 gen) 263 struct walk_control *wc, u64 gen)
264{ 264{
265 if (wc->pin) { 265 if (wc->pin)
266 mutex_lock(&log->fs_info->pinned_mutex);
267 btrfs_update_pinned_extents(log->fs_info->extent_root, 266 btrfs_update_pinned_extents(log->fs_info->extent_root,
268 eb->start, eb->len, 1); 267 eb->start, eb->len, 1);
269 }
270 268
271 if (btrfs_buffer_uptodate(eb, gen)) { 269 if (btrfs_buffer_uptodate(eb, gen)) {
272 if (wc->write) 270 if (wc->write)