diff options
| -rw-r--r-- | fs/btrfs/ctree.c | 7 | ||||
| -rw-r--r-- | fs/btrfs/ctree.h | 1 | ||||
| -rw-r--r-- | fs/btrfs/disk-io.c | 4 |
3 files changed, 1 insertions, 11 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 2603ee539b7a..3b6e35aafc9e 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
| @@ -388,16 +388,14 @@ noinline int btrfs_cow_block(struct btrfs_trans_handle *trans, | |||
| 388 | WARN_ON(1); | 388 | WARN_ON(1); |
| 389 | } | 389 | } |
| 390 | 390 | ||
| 391 | spin_lock(&root->fs_info->hash_lock); | ||
| 392 | if (btrfs_header_generation(buf) == trans->transid && | 391 | if (btrfs_header_generation(buf) == trans->transid && |
| 393 | btrfs_header_owner(buf) == root->root_key.objectid && | 392 | btrfs_header_owner(buf) == root->root_key.objectid && |
| 394 | !btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) { | 393 | !btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN)) { |
| 395 | *cow_ret = buf; | 394 | *cow_ret = buf; |
| 396 | spin_unlock(&root->fs_info->hash_lock); | ||
| 397 | WARN_ON(prealloc_dest); | 395 | WARN_ON(prealloc_dest); |
| 398 | return 0; | 396 | return 0; |
| 399 | } | 397 | } |
| 400 | spin_unlock(&root->fs_info->hash_lock); | 398 | |
| 401 | search_start = buf->start & ~((u64)(1024 * 1024 * 1024) - 1); | 399 | search_start = buf->start & ~((u64)(1024 * 1024 * 1024) - 1); |
| 402 | ret = __btrfs_cow_block(trans, root, buf, parent, | 400 | ret = __btrfs_cow_block(trans, root, buf, parent, |
| 403 | parent_slot, cow_ret, search_start, 0, | 401 | parent_slot, cow_ret, search_start, 0, |
| @@ -1376,14 +1374,11 @@ again: | |||
| 1376 | int wret; | 1374 | int wret; |
| 1377 | 1375 | ||
| 1378 | /* is a cow on this block not required */ | 1376 | /* is a cow on this block not required */ |
| 1379 | spin_lock(&root->fs_info->hash_lock); | ||
| 1380 | if (btrfs_header_generation(b) == trans->transid && | 1377 | if (btrfs_header_generation(b) == trans->transid && |
| 1381 | btrfs_header_owner(b) == root->root_key.objectid && | 1378 | btrfs_header_owner(b) == root->root_key.objectid && |
| 1382 | !btrfs_header_flag(b, BTRFS_HEADER_FLAG_WRITTEN)) { | 1379 | !btrfs_header_flag(b, BTRFS_HEADER_FLAG_WRITTEN)) { |
| 1383 | spin_unlock(&root->fs_info->hash_lock); | ||
| 1384 | goto cow_done; | 1380 | goto cow_done; |
| 1385 | } | 1381 | } |
| 1386 | spin_unlock(&root->fs_info->hash_lock); | ||
| 1387 | 1382 | ||
| 1388 | /* ok, we have to cow, is our old prealloc the right | 1383 | /* ok, we have to cow, is our old prealloc the right |
| 1389 | * size? | 1384 | * size? |
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index de103a8a815e..f2b8d26b0472 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
| @@ -703,7 +703,6 @@ struct btrfs_fs_info { | |||
| 703 | struct super_block *sb; | 703 | struct super_block *sb; |
| 704 | struct inode *btree_inode; | 704 | struct inode *btree_inode; |
| 705 | struct backing_dev_info bdi; | 705 | struct backing_dev_info bdi; |
| 706 | spinlock_t hash_lock; | ||
| 707 | struct mutex trans_mutex; | 706 | struct mutex trans_mutex; |
| 708 | struct mutex tree_log_mutex; | 707 | struct mutex tree_log_mutex; |
| 709 | struct mutex transaction_kthread_mutex; | 708 | struct mutex transaction_kthread_mutex; |
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 9c3810047976..549271607c17 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
| @@ -1503,7 +1503,6 @@ struct btrfs_root *open_ctree(struct super_block *sb, | |||
| 1503 | INIT_LIST_HEAD(&fs_info->dead_roots); | 1503 | INIT_LIST_HEAD(&fs_info->dead_roots); |
| 1504 | INIT_LIST_HEAD(&fs_info->hashers); | 1504 | INIT_LIST_HEAD(&fs_info->hashers); |
| 1505 | INIT_LIST_HEAD(&fs_info->delalloc_inodes); | 1505 | INIT_LIST_HEAD(&fs_info->delalloc_inodes); |
| 1506 | spin_lock_init(&fs_info->hash_lock); | ||
| 1507 | spin_lock_init(&fs_info->delalloc_lock); | 1506 | spin_lock_init(&fs_info->delalloc_lock); |
| 1508 | spin_lock_init(&fs_info->new_trans_lock); | 1507 | spin_lock_init(&fs_info->new_trans_lock); |
| 1509 | spin_lock_init(&fs_info->ref_cache_lock); | 1508 | spin_lock_init(&fs_info->ref_cache_lock); |
| @@ -2361,7 +2360,6 @@ int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid) | |||
| 2361 | int btree_lock_page_hook(struct page *page) | 2360 | int btree_lock_page_hook(struct page *page) |
| 2362 | { | 2361 | { |
| 2363 | struct inode *inode = page->mapping->host; | 2362 | struct inode *inode = page->mapping->host; |
| 2364 | struct btrfs_root *root = BTRFS_I(inode)->root; | ||
| 2365 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; | 2363 | struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; |
| 2366 | struct extent_buffer *eb; | 2364 | struct extent_buffer *eb; |
| 2367 | unsigned long len; | 2365 | unsigned long len; |
| @@ -2376,9 +2374,7 @@ int btree_lock_page_hook(struct page *page) | |||
| 2376 | goto out; | 2374 | goto out; |
| 2377 | 2375 | ||
| 2378 | btrfs_tree_lock(eb); | 2376 | btrfs_tree_lock(eb); |
| 2379 | spin_lock(&root->fs_info->hash_lock); | ||
| 2380 | btrfs_set_header_flag(eb, BTRFS_HEADER_FLAG_WRITTEN); | 2377 | btrfs_set_header_flag(eb, BTRFS_HEADER_FLAG_WRITTEN); |
| 2381 | spin_unlock(&root->fs_info->hash_lock); | ||
| 2382 | btrfs_tree_unlock(eb); | 2378 | btrfs_tree_unlock(eb); |
| 2383 | free_extent_buffer(eb); | 2379 | free_extent_buffer(eb); |
| 2384 | out: | 2380 | out: |
