diff options
author | David S. Miller <davem@davemloft.net> | 2016-06-30 05:03:36 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-06-30 05:03:36 -0400 |
commit | ee58b57100ca953da7320c285315a95db2f7053d (patch) | |
tree | 77b815a31240adc4d6326346908137fc6c2c3a96 /fs/btrfs/ctree.c | |
parent | 6f30e8b022c8e3a722928ddb1a2ae0be852fcc0e (diff) | |
parent | e7bdea7750eb2a64aea4a08fa5c0a31719c8155d (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Several cases of overlapping changes, except the packet scheduler
conflicts which deal with the addition of the free list parameter
to qdisc_enqueue().
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 427c36b430a6..a85cf7d23309 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -1373,7 +1373,8 @@ tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct btrfs_path *path, | |||
1373 | 1373 | ||
1374 | if (tm->op == MOD_LOG_KEY_REMOVE_WHILE_FREEING) { | 1374 | if (tm->op == MOD_LOG_KEY_REMOVE_WHILE_FREEING) { |
1375 | BUG_ON(tm->slot != 0); | 1375 | BUG_ON(tm->slot != 0); |
1376 | eb_rewin = alloc_dummy_extent_buffer(fs_info, eb->start); | 1376 | eb_rewin = alloc_dummy_extent_buffer(fs_info, eb->start, |
1377 | eb->len); | ||
1377 | if (!eb_rewin) { | 1378 | if (!eb_rewin) { |
1378 | btrfs_tree_read_unlock_blocking(eb); | 1379 | btrfs_tree_read_unlock_blocking(eb); |
1379 | free_extent_buffer(eb); | 1380 | free_extent_buffer(eb); |
@@ -1454,7 +1455,8 @@ get_old_root(struct btrfs_root *root, u64 time_seq) | |||
1454 | } else if (old_root) { | 1455 | } else if (old_root) { |
1455 | btrfs_tree_read_unlock(eb_root); | 1456 | btrfs_tree_read_unlock(eb_root); |
1456 | free_extent_buffer(eb_root); | 1457 | free_extent_buffer(eb_root); |
1457 | eb = alloc_dummy_extent_buffer(root->fs_info, logical); | 1458 | eb = alloc_dummy_extent_buffer(root->fs_info, logical, |
1459 | root->nodesize); | ||
1458 | } else { | 1460 | } else { |
1459 | btrfs_set_lock_blocking_rw(eb_root, BTRFS_READ_LOCK); | 1461 | btrfs_set_lock_blocking_rw(eb_root, BTRFS_READ_LOCK); |
1460 | eb = btrfs_clone_extent_buffer(eb_root); | 1462 | eb = btrfs_clone_extent_buffer(eb_root); |
@@ -1552,6 +1554,7 @@ noinline int btrfs_cow_block(struct btrfs_trans_handle *trans, | |||
1552 | trans->transid, root->fs_info->generation); | 1554 | trans->transid, root->fs_info->generation); |
1553 | 1555 | ||
1554 | if (!should_cow_block(trans, root, buf)) { | 1556 | if (!should_cow_block(trans, root, buf)) { |
1557 | trans->dirty = true; | ||
1555 | *cow_ret = buf; | 1558 | *cow_ret = buf; |
1556 | return 0; | 1559 | return 0; |
1557 | } | 1560 | } |
@@ -1783,10 +1786,12 @@ static noinline int generic_bin_search(struct extent_buffer *eb, | |||
1783 | if (!err) { | 1786 | if (!err) { |
1784 | tmp = (struct btrfs_disk_key *)(kaddr + offset - | 1787 | tmp = (struct btrfs_disk_key *)(kaddr + offset - |
1785 | map_start); | 1788 | map_start); |
1786 | } else { | 1789 | } else if (err == 1) { |
1787 | read_extent_buffer(eb, &unaligned, | 1790 | read_extent_buffer(eb, &unaligned, |
1788 | offset, sizeof(unaligned)); | 1791 | offset, sizeof(unaligned)); |
1789 | tmp = &unaligned; | 1792 | tmp = &unaligned; |
1793 | } else { | ||
1794 | return err; | ||
1790 | } | 1795 | } |
1791 | 1796 | ||
1792 | } else { | 1797 | } else { |
@@ -2510,6 +2515,8 @@ read_block_for_search(struct btrfs_trans_handle *trans, | |||
2510 | if (!btrfs_buffer_uptodate(tmp, 0, 0)) | 2515 | if (!btrfs_buffer_uptodate(tmp, 0, 0)) |
2511 | ret = -EIO; | 2516 | ret = -EIO; |
2512 | free_extent_buffer(tmp); | 2517 | free_extent_buffer(tmp); |
2518 | } else { | ||
2519 | ret = PTR_ERR(tmp); | ||
2513 | } | 2520 | } |
2514 | return ret; | 2521 | return ret; |
2515 | } | 2522 | } |
@@ -2773,8 +2780,10 @@ again: | |||
2773 | * then we don't want to set the path blocking, | 2780 | * then we don't want to set the path blocking, |
2774 | * so we test it here | 2781 | * so we test it here |
2775 | */ | 2782 | */ |
2776 | if (!should_cow_block(trans, root, b)) | 2783 | if (!should_cow_block(trans, root, b)) { |
2784 | trans->dirty = true; | ||
2777 | goto cow_done; | 2785 | goto cow_done; |
2786 | } | ||
2778 | 2787 | ||
2779 | /* | 2788 | /* |
2780 | * must have write locks on this node and the | 2789 | * must have write locks on this node and the |
@@ -2823,6 +2832,8 @@ cow_done: | |||
2823 | } | 2832 | } |
2824 | 2833 | ||
2825 | ret = key_search(b, key, level, &prev_cmp, &slot); | 2834 | ret = key_search(b, key, level, &prev_cmp, &slot); |
2835 | if (ret < 0) | ||
2836 | goto done; | ||
2826 | 2837 | ||
2827 | if (level != 0) { | 2838 | if (level != 0) { |
2828 | int dec = 0; | 2839 | int dec = 0; |