Commit 04018de5 authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason

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: default avatarJosef Bacik <jbacik@redhat.com>
parent 6226cb0a
...@@ -728,7 +728,6 @@ struct btrfs_fs_info { ...@@ -728,7 +728,6 @@ struct btrfs_fs_info {
struct mutex tree_log_mutex; struct mutex tree_log_mutex;
struct mutex transaction_kthread_mutex; struct mutex transaction_kthread_mutex;
struct mutex cleaner_mutex; struct mutex cleaner_mutex;
struct mutex pinned_mutex;
struct mutex chunk_mutex; struct mutex chunk_mutex;
struct mutex drop_mutex; struct mutex drop_mutex;
struct mutex volume_mutex; struct mutex volume_mutex;
......
...@@ -1647,7 +1647,6 @@ struct btrfs_root *open_ctree(struct super_block *sb, ...@@ -1647,7 +1647,6 @@ struct btrfs_root *open_ctree(struct super_block *sb,
mutex_init(&fs_info->ordered_operations_mutex); mutex_init(&fs_info->ordered_operations_mutex);
mutex_init(&fs_info->tree_log_mutex); mutex_init(&fs_info->tree_log_mutex);
mutex_init(&fs_info->drop_mutex); mutex_init(&fs_info->drop_mutex);
mutex_init(&fs_info->pinned_mutex);
mutex_init(&fs_info->chunk_mutex); mutex_init(&fs_info->chunk_mutex);
mutex_init(&fs_info->transaction_kthread_mutex); mutex_init(&fs_info->transaction_kthread_mutex);
mutex_init(&fs_info->cleaner_mutex); mutex_init(&fs_info->cleaner_mutex);
......
...@@ -166,7 +166,6 @@ static int add_new_free_space(struct btrfs_block_group_cache *block_group, ...@@ -166,7 +166,6 @@ static int add_new_free_space(struct btrfs_block_group_cache *block_group,
u64 extent_start, extent_end, size; u64 extent_start, extent_end, size;
int ret; int ret;
mutex_lock(&info->pinned_mutex);
while (start < end) { while (start < end) {
ret = find_first_extent_bit(&info->pinned_extents, start, ret = find_first_extent_bit(&info->pinned_extents, start,
&extent_start, &extent_end, &extent_start, &extent_end,
...@@ -192,7 +191,6 @@ static int add_new_free_space(struct btrfs_block_group_cache *block_group, ...@@ -192,7 +191,6 @@ static int add_new_free_space(struct btrfs_block_group_cache *block_group,
ret = btrfs_add_free_space(block_group, start, size); ret = btrfs_add_free_space(block_group, start, size);
BUG_ON(ret); BUG_ON(ret);
} }
mutex_unlock(&info->pinned_mutex);
return 0; return 0;
} }
...@@ -2047,7 +2045,6 @@ int btrfs_update_pinned_extents(struct btrfs_root *root, ...@@ -2047,7 +2045,6 @@ int btrfs_update_pinned_extents(struct btrfs_root *root,
struct btrfs_block_group_cache *cache; struct btrfs_block_group_cache *cache;
struct btrfs_fs_info *fs_info = root->fs_info; struct btrfs_fs_info *fs_info = root->fs_info;
WARN_ON(!mutex_is_locked(&root->fs_info->pinned_mutex));
if (pin) { if (pin) {
set_extent_dirty(&fs_info->pinned_extents, set_extent_dirty(&fs_info->pinned_extents,
bytenr, bytenr + num - 1, GFP_NOFS); bytenr, bytenr + num - 1, GFP_NOFS);
...@@ -2055,7 +2052,6 @@ int btrfs_update_pinned_extents(struct btrfs_root *root, ...@@ -2055,7 +2052,6 @@ int btrfs_update_pinned_extents(struct btrfs_root *root,
clear_extent_dirty(&fs_info->pinned_extents, clear_extent_dirty(&fs_info->pinned_extents,
bytenr, bytenr + num - 1, GFP_NOFS); bytenr, bytenr + num - 1, GFP_NOFS);
} }
mutex_unlock(&root->fs_info->pinned_mutex);
while (num > 0) { while (num > 0) {
cache = btrfs_lookup_block_group(fs_info, bytenr); 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,7 +2123,6 @@ int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy)
struct extent_io_tree *pinned_extents = &root->fs_info->pinned_extents; struct extent_io_tree *pinned_extents = &root->fs_info->pinned_extents;
int ret; int ret;
mutex_lock(&root->fs_info->pinned_mutex);
while (1) { while (1) {
ret = find_first_extent_bit(pinned_extents, last, ret = find_first_extent_bit(pinned_extents, last,
&start, &end, EXTENT_DIRTY); &start, &end, EXTENT_DIRTY);
...@@ -2136,7 +2131,6 @@ int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy) ...@@ -2136,7 +2131,6 @@ int btrfs_copy_pinned(struct btrfs_root *root, struct extent_io_tree *copy)
set_extent_dirty(copy, start, end, GFP_NOFS); set_extent_dirty(copy, start, end, GFP_NOFS);
last = end + 1; last = end + 1;
} }
mutex_unlock(&root->fs_info->pinned_mutex);
return 0; return 0;
} }
...@@ -2149,7 +2143,6 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, ...@@ -2149,7 +2143,6 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
int ret; int ret;
while (1) { while (1) {
mutex_lock(&root->fs_info->pinned_mutex);
ret = find_first_extent_bit(unpin, 0, &start, &end, ret = find_first_extent_bit(unpin, 0, &start, &end,
EXTENT_DIRTY); EXTENT_DIRTY);
if (ret) if (ret)
...@@ -2163,7 +2156,6 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, ...@@ -2163,7 +2156,6 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans,
cond_resched(); cond_resched();
} }
mutex_unlock(&root->fs_info->pinned_mutex);
return ret; return ret;
} }
...@@ -2205,7 +2197,6 @@ static int pin_down_bytes(struct btrfs_trans_handle *trans, ...@@ -2205,7 +2197,6 @@ static int pin_down_bytes(struct btrfs_trans_handle *trans,
free_extent_buffer(buf); free_extent_buffer(buf);
pinit: pinit:
btrfs_set_path_blocking(path); btrfs_set_path_blocking(path);
mutex_lock(&root->fs_info->pinned_mutex);
/* unlocks the pinned mutex */ /* unlocks the pinned mutex */
btrfs_update_pinned_extents(root, bytenr, num_bytes, 1); btrfs_update_pinned_extents(root, bytenr, num_bytes, 1);
...@@ -2511,8 +2502,6 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans, ...@@ -2511,8 +2502,6 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans,
*/ */
if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID && if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID &&
owner_objectid < BTRFS_FIRST_FREE_OBJECTID) { owner_objectid < BTRFS_FIRST_FREE_OBJECTID) {
mutex_lock(&root->fs_info->pinned_mutex);
/* unlocks the pinned mutex */ /* unlocks the pinned mutex */
btrfs_update_pinned_extents(root, bytenr, num_bytes, 1); btrfs_update_pinned_extents(root, bytenr, num_bytes, 1);
update_reserved_extents(root, bytenr, num_bytes, 0); update_reserved_extents(root, bytenr, num_bytes, 0);
......
...@@ -262,11 +262,9 @@ static int process_one_buffer(struct btrfs_root *log, ...@@ -262,11 +262,9 @@ static int process_one_buffer(struct btrfs_root *log,
struct extent_buffer *eb, struct extent_buffer *eb,
struct walk_control *wc, u64 gen) struct walk_control *wc, u64 gen)
{ {
if (wc->pin) { if (wc->pin)
mutex_lock(&log->fs_info->pinned_mutex);
btrfs_update_pinned_extents(log->fs_info->extent_root, btrfs_update_pinned_extents(log->fs_info->extent_root,
eb->start, eb->len, 1); eb->start, eb->len, 1);
}
if (btrfs_buffer_uptodate(eb, gen)) { if (btrfs_buffer_uptodate(eb, gen)) {
if (wc->write) if (wc->write)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment