diff options
author | Jiri Kosina <jkosina@suse.cz> | 2013-01-29 04:48:30 -0500 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2013-01-29 04:48:30 -0500 |
commit | 617677295b53a40d0e54aac4cbbc216ffbc755dd (patch) | |
tree | 51b9e87213243ed5efff252c8e8d8fec4eebc588 /fs/btrfs/relocation.c | |
parent | 5c8d1b68e01a144813e38795fe6dbe7ebb506131 (diff) | |
parent | 6abb7c25775b7fb2225ad0508236d63ca710e65f (diff) |
Merge branch 'master' into for-next
Conflicts:
drivers/devfreq/exynos4_bus.c
Sync with Linus' tree to be able to apply patches that are
against newer code (mvneta).
Diffstat (limited to 'fs/btrfs/relocation.c')
-rw-r--r-- | fs/btrfs/relocation.c | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index c188e815a733..17c306bf177a 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c | |||
@@ -2025,7 +2025,6 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc, | |||
2025 | struct btrfs_root_item *root_item; | 2025 | struct btrfs_root_item *root_item; |
2026 | struct btrfs_path *path; | 2026 | struct btrfs_path *path; |
2027 | struct extent_buffer *leaf; | 2027 | struct extent_buffer *leaf; |
2028 | unsigned long nr; | ||
2029 | int level; | 2028 | int level; |
2030 | int max_level; | 2029 | int max_level; |
2031 | int replaced = 0; | 2030 | int replaced = 0; |
@@ -2074,7 +2073,8 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc, | |||
2074 | BUG_ON(IS_ERR(trans)); | 2073 | BUG_ON(IS_ERR(trans)); |
2075 | trans->block_rsv = rc->block_rsv; | 2074 | trans->block_rsv = rc->block_rsv; |
2076 | 2075 | ||
2077 | ret = btrfs_block_rsv_refill(root, rc->block_rsv, min_reserved); | 2076 | ret = btrfs_block_rsv_refill(root, rc->block_rsv, min_reserved, |
2077 | BTRFS_RESERVE_FLUSH_ALL); | ||
2078 | if (ret) { | 2078 | if (ret) { |
2079 | BUG_ON(ret != -EAGAIN); | 2079 | BUG_ON(ret != -EAGAIN); |
2080 | ret = btrfs_commit_transaction(trans, root); | 2080 | ret = btrfs_commit_transaction(trans, root); |
@@ -2125,10 +2125,9 @@ static noinline_for_stack int merge_reloc_root(struct reloc_control *rc, | |||
2125 | path->slots[level]); | 2125 | path->slots[level]); |
2126 | root_item->drop_level = level; | 2126 | root_item->drop_level = level; |
2127 | 2127 | ||
2128 | nr = trans->blocks_used; | ||
2129 | btrfs_end_transaction_throttle(trans, root); | 2128 | btrfs_end_transaction_throttle(trans, root); |
2130 | 2129 | ||
2131 | btrfs_btree_balance_dirty(root, nr); | 2130 | btrfs_btree_balance_dirty(root); |
2132 | 2131 | ||
2133 | if (replaced && rc->stage == UPDATE_DATA_PTRS) | 2132 | if (replaced && rc->stage == UPDATE_DATA_PTRS) |
2134 | invalidate_extent_cache(root, &key, &next_key); | 2133 | invalidate_extent_cache(root, &key, &next_key); |
@@ -2155,10 +2154,9 @@ out: | |||
2155 | btrfs_update_reloc_root(trans, root); | 2154 | btrfs_update_reloc_root(trans, root); |
2156 | } | 2155 | } |
2157 | 2156 | ||
2158 | nr = trans->blocks_used; | ||
2159 | btrfs_end_transaction_throttle(trans, root); | 2157 | btrfs_end_transaction_throttle(trans, root); |
2160 | 2158 | ||
2161 | btrfs_btree_balance_dirty(root, nr); | 2159 | btrfs_btree_balance_dirty(root); |
2162 | 2160 | ||
2163 | if (replaced && rc->stage == UPDATE_DATA_PTRS) | 2161 | if (replaced && rc->stage == UPDATE_DATA_PTRS) |
2164 | invalidate_extent_cache(root, &key, &next_key); | 2162 | invalidate_extent_cache(root, &key, &next_key); |
@@ -2184,7 +2182,8 @@ int prepare_to_merge(struct reloc_control *rc, int err) | |||
2184 | again: | 2182 | again: |
2185 | if (!err) { | 2183 | if (!err) { |
2186 | num_bytes = rc->merging_rsv_size; | 2184 | num_bytes = rc->merging_rsv_size; |
2187 | ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes); | 2185 | ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes, |
2186 | BTRFS_RESERVE_FLUSH_ALL); | ||
2188 | if (ret) | 2187 | if (ret) |
2189 | err = ret; | 2188 | err = ret; |
2190 | } | 2189 | } |
@@ -2459,7 +2458,8 @@ static int reserve_metadata_space(struct btrfs_trans_handle *trans, | |||
2459 | num_bytes = calcu_metadata_size(rc, node, 1) * 2; | 2458 | num_bytes = calcu_metadata_size(rc, node, 1) * 2; |
2460 | 2459 | ||
2461 | trans->block_rsv = rc->block_rsv; | 2460 | trans->block_rsv = rc->block_rsv; |
2462 | ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes); | 2461 | ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes, |
2462 | BTRFS_RESERVE_FLUSH_ALL); | ||
2463 | if (ret) { | 2463 | if (ret) { |
2464 | if (ret == -EAGAIN) | 2464 | if (ret == -EAGAIN) |
2465 | rc->commit_transaction = 1; | 2465 | rc->commit_transaction = 1; |
@@ -3259,7 +3259,6 @@ static int delete_block_group_cache(struct btrfs_fs_info *fs_info, | |||
3259 | struct btrfs_path *path; | 3259 | struct btrfs_path *path; |
3260 | struct btrfs_root *root = fs_info->tree_root; | 3260 | struct btrfs_root *root = fs_info->tree_root; |
3261 | struct btrfs_trans_handle *trans; | 3261 | struct btrfs_trans_handle *trans; |
3262 | unsigned long nr; | ||
3263 | int ret = 0; | 3262 | int ret = 0; |
3264 | 3263 | ||
3265 | if (inode) | 3264 | if (inode) |
@@ -3293,9 +3292,8 @@ truncate: | |||
3293 | ret = btrfs_truncate_free_space_cache(root, trans, path, inode); | 3292 | ret = btrfs_truncate_free_space_cache(root, trans, path, inode); |
3294 | 3293 | ||
3295 | btrfs_free_path(path); | 3294 | btrfs_free_path(path); |
3296 | nr = trans->blocks_used; | ||
3297 | btrfs_end_transaction(trans, root); | 3295 | btrfs_end_transaction(trans, root); |
3298 | btrfs_btree_balance_dirty(root, nr); | 3296 | btrfs_btree_balance_dirty(root); |
3299 | out: | 3297 | out: |
3300 | iput(inode); | 3298 | iput(inode); |
3301 | return ret; | 3299 | return ret; |
@@ -3685,7 +3683,8 @@ int prepare_to_relocate(struct reloc_control *rc) | |||
3685 | * is no reservation in transaction handle. | 3683 | * is no reservation in transaction handle. |
3686 | */ | 3684 | */ |
3687 | ret = btrfs_block_rsv_add(rc->extent_root, rc->block_rsv, | 3685 | ret = btrfs_block_rsv_add(rc->extent_root, rc->block_rsv, |
3688 | rc->extent_root->nodesize * 256); | 3686 | rc->extent_root->nodesize * 256, |
3687 | BTRFS_RESERVE_FLUSH_ALL); | ||
3689 | if (ret) | 3688 | if (ret) |
3690 | return ret; | 3689 | return ret; |
3691 | 3690 | ||
@@ -3711,7 +3710,6 @@ static noinline_for_stack int relocate_block_group(struct reloc_control *rc) | |||
3711 | struct btrfs_trans_handle *trans = NULL; | 3710 | struct btrfs_trans_handle *trans = NULL; |
3712 | struct btrfs_path *path; | 3711 | struct btrfs_path *path; |
3713 | struct btrfs_extent_item *ei; | 3712 | struct btrfs_extent_item *ei; |
3714 | unsigned long nr; | ||
3715 | u64 flags; | 3713 | u64 flags; |
3716 | u32 item_size; | 3714 | u32 item_size; |
3717 | int ret; | 3715 | int ret; |
@@ -3828,9 +3826,8 @@ restart: | |||
3828 | ret = btrfs_commit_transaction(trans, rc->extent_root); | 3826 | ret = btrfs_commit_transaction(trans, rc->extent_root); |
3829 | BUG_ON(ret); | 3827 | BUG_ON(ret); |
3830 | } else { | 3828 | } else { |
3831 | nr = trans->blocks_used; | ||
3832 | btrfs_end_transaction_throttle(trans, rc->extent_root); | 3829 | btrfs_end_transaction_throttle(trans, rc->extent_root); |
3833 | btrfs_btree_balance_dirty(rc->extent_root, nr); | 3830 | btrfs_btree_balance_dirty(rc->extent_root); |
3834 | } | 3831 | } |
3835 | trans = NULL; | 3832 | trans = NULL; |
3836 | 3833 | ||
@@ -3860,9 +3857,8 @@ restart: | |||
3860 | GFP_NOFS); | 3857 | GFP_NOFS); |
3861 | 3858 | ||
3862 | if (trans) { | 3859 | if (trans) { |
3863 | nr = trans->blocks_used; | ||
3864 | btrfs_end_transaction_throttle(trans, rc->extent_root); | 3860 | btrfs_end_transaction_throttle(trans, rc->extent_root); |
3865 | btrfs_btree_balance_dirty(rc->extent_root, nr); | 3861 | btrfs_btree_balance_dirty(rc->extent_root); |
3866 | } | 3862 | } |
3867 | 3863 | ||
3868 | if (!err) { | 3864 | if (!err) { |
@@ -3941,7 +3937,6 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, | |||
3941 | struct btrfs_trans_handle *trans; | 3937 | struct btrfs_trans_handle *trans; |
3942 | struct btrfs_root *root; | 3938 | struct btrfs_root *root; |
3943 | struct btrfs_key key; | 3939 | struct btrfs_key key; |
3944 | unsigned long nr; | ||
3945 | u64 objectid = BTRFS_FIRST_FREE_OBJECTID; | 3940 | u64 objectid = BTRFS_FIRST_FREE_OBJECTID; |
3946 | int err = 0; | 3941 | int err = 0; |
3947 | 3942 | ||
@@ -3969,9 +3964,8 @@ struct inode *create_reloc_inode(struct btrfs_fs_info *fs_info, | |||
3969 | 3964 | ||
3970 | err = btrfs_orphan_add(trans, inode); | 3965 | err = btrfs_orphan_add(trans, inode); |
3971 | out: | 3966 | out: |
3972 | nr = trans->blocks_used; | ||
3973 | btrfs_end_transaction(trans, root); | 3967 | btrfs_end_transaction(trans, root); |
3974 | btrfs_btree_balance_dirty(root, nr); | 3968 | btrfs_btree_balance_dirty(root); |
3975 | if (err) { | 3969 | if (err) { |
3976 | if (inode) | 3970 | if (inode) |
3977 | iput(inode); | 3971 | iput(inode); |
@@ -4057,7 +4051,11 @@ int btrfs_relocate_block_group(struct btrfs_root *extent_root, u64 group_start) | |||
4057 | (unsigned long long)rc->block_group->key.objectid, | 4051 | (unsigned long long)rc->block_group->key.objectid, |
4058 | (unsigned long long)rc->block_group->flags); | 4052 | (unsigned long long)rc->block_group->flags); |
4059 | 4053 | ||
4060 | btrfs_start_delalloc_inodes(fs_info->tree_root, 0); | 4054 | ret = btrfs_start_delalloc_inodes(fs_info->tree_root, 0); |
4055 | if (ret < 0) { | ||
4056 | err = ret; | ||
4057 | goto out; | ||
4058 | } | ||
4061 | btrfs_wait_ordered_extents(fs_info->tree_root, 0); | 4059 | btrfs_wait_ordered_extents(fs_info->tree_root, 0); |
4062 | 4060 | ||
4063 | while (1) { | 4061 | while (1) { |