diff options
author | Josef Bacik <jbacik@fb.com> | 2016-03-25 13:25:48 -0400 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2016-07-07 12:45:53 -0400 |
commit | 25d609f86d6808eb1f0e8a6cafc3edb4a2b5ae35 (patch) | |
tree | 24b8d9a911aa57675c5ade8f46028d32e77c521a | |
parent | e40edf2da4fc6ab10c707b0522372b08b38171e6 (diff) |
Btrfs: fix callers of btrfs_block_rsv_migrate
So btrfs_block_rsv_migrate just unconditionally calls block_rsv_migrate_bytes.
Not only this but it unconditionally changes the size of the block_rsv. This
isn't a bug strictly speaking, but it makes truncate block rsv's look funny
because every time we migrate bytes over its size grows, even though we only
want it to be a specific size. So collapse this into one function that takes an
update_size argument and make truncate and evict not update the size for
consistency sake. Thanks,
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r-- | fs/btrfs/ctree.h | 4 | ||||
-rw-r--r-- | fs/btrfs/delayed-inode.c | 8 | ||||
-rw-r--r-- | fs/btrfs/extent-tree.c | 18 | ||||
-rw-r--r-- | fs/btrfs/file.c | 4 | ||||
-rw-r--r-- | fs/btrfs/inode.c | 7 | ||||
-rw-r--r-- | fs/btrfs/relocation.c | 2 |
6 files changed, 18 insertions, 25 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 4274a7bfdaed..fe16474fabf3 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -2661,8 +2661,8 @@ int btrfs_block_rsv_refill(struct btrfs_root *root, | |||
2661 | struct btrfs_block_rsv *block_rsv, u64 min_reserved, | 2661 | struct btrfs_block_rsv *block_rsv, u64 min_reserved, |
2662 | enum btrfs_reserve_flush_enum flush); | 2662 | enum btrfs_reserve_flush_enum flush); |
2663 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, | 2663 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, |
2664 | struct btrfs_block_rsv *dst_rsv, | 2664 | struct btrfs_block_rsv *dst_rsv, u64 num_bytes, |
2665 | u64 num_bytes); | 2665 | int update_size); |
2666 | int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info, | 2666 | int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info, |
2667 | struct btrfs_block_rsv *dest, u64 num_bytes, | 2667 | struct btrfs_block_rsv *dest, u64 num_bytes, |
2668 | int min_factor); | 2668 | int min_factor); |
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index d3aaabbfada0..f749a5447b2a 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c | |||
@@ -553,7 +553,7 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans, | |||
553 | dst_rsv = &root->fs_info->delayed_block_rsv; | 553 | dst_rsv = &root->fs_info->delayed_block_rsv; |
554 | 554 | ||
555 | num_bytes = btrfs_calc_trans_metadata_size(root, 1); | 555 | num_bytes = btrfs_calc_trans_metadata_size(root, 1); |
556 | ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes); | 556 | ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1); |
557 | if (!ret) { | 557 | if (!ret) { |
558 | trace_btrfs_space_reservation(root->fs_info, "delayed_item", | 558 | trace_btrfs_space_reservation(root->fs_info, "delayed_item", |
559 | item->key.objectid, | 559 | item->key.objectid, |
@@ -649,7 +649,7 @@ static int btrfs_delayed_inode_reserve_metadata( | |||
649 | if (!ret) | 649 | if (!ret) |
650 | goto out; | 650 | goto out; |
651 | 651 | ||
652 | ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes); | 652 | ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1); |
653 | if (!ret) | 653 | if (!ret) |
654 | goto out; | 654 | goto out; |
655 | 655 | ||
@@ -663,12 +663,12 @@ static int btrfs_delayed_inode_reserve_metadata( | |||
663 | * since this really shouldn't happen that often. | 663 | * since this really shouldn't happen that often. |
664 | */ | 664 | */ |
665 | ret = btrfs_block_rsv_migrate(&root->fs_info->global_block_rsv, | 665 | ret = btrfs_block_rsv_migrate(&root->fs_info->global_block_rsv, |
666 | dst_rsv, num_bytes); | 666 | dst_rsv, num_bytes, 1); |
667 | goto out; | 667 | goto out; |
668 | } | 668 | } |
669 | 669 | ||
670 | migrate: | 670 | migrate: |
671 | ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes); | 671 | ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1); |
672 | 672 | ||
673 | out: | 673 | out: |
674 | /* | 674 | /* |
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 777d9a5aa83f..1ceabb7a4479 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c | |||
@@ -5265,8 +5265,9 @@ static void block_rsv_release_bytes(struct btrfs_fs_info *fs_info, | |||
5265 | } | 5265 | } |
5266 | } | 5266 | } |
5267 | 5267 | ||
5268 | static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src, | 5268 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src, |
5269 | struct btrfs_block_rsv *dst, u64 num_bytes) | 5269 | struct btrfs_block_rsv *dst, u64 num_bytes, |
5270 | int update_size) | ||
5270 | { | 5271 | { |
5271 | int ret; | 5272 | int ret; |
5272 | 5273 | ||
@@ -5274,7 +5275,7 @@ static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src, | |||
5274 | if (ret) | 5275 | if (ret) |
5275 | return ret; | 5276 | return ret; |
5276 | 5277 | ||
5277 | block_rsv_add_bytes(dst, num_bytes, 1); | 5278 | block_rsv_add_bytes(dst, num_bytes, update_size); |
5278 | return 0; | 5279 | return 0; |
5279 | } | 5280 | } |
5280 | 5281 | ||
@@ -5381,13 +5382,6 @@ int btrfs_block_rsv_refill(struct btrfs_root *root, | |||
5381 | return ret; | 5382 | return ret; |
5382 | } | 5383 | } |
5383 | 5384 | ||
5384 | int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, | ||
5385 | struct btrfs_block_rsv *dst_rsv, | ||
5386 | u64 num_bytes) | ||
5387 | { | ||
5388 | return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes); | ||
5389 | } | ||
5390 | |||
5391 | void btrfs_block_rsv_release(struct btrfs_root *root, | 5385 | void btrfs_block_rsv_release(struct btrfs_root *root, |
5392 | struct btrfs_block_rsv *block_rsv, | 5386 | struct btrfs_block_rsv *block_rsv, |
5393 | u64 num_bytes) | 5387 | u64 num_bytes) |
@@ -5567,7 +5561,7 @@ int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans, | |||
5567 | u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1); | 5561 | u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1); |
5568 | trace_btrfs_space_reservation(root->fs_info, "orphan", | 5562 | trace_btrfs_space_reservation(root->fs_info, "orphan", |
5569 | btrfs_ino(inode), num_bytes, 1); | 5563 | btrfs_ino(inode), num_bytes, 1); |
5570 | return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes); | 5564 | return btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1); |
5571 | } | 5565 | } |
5572 | 5566 | ||
5573 | void btrfs_orphan_release_metadata(struct inode *inode) | 5567 | void btrfs_orphan_release_metadata(struct inode *inode) |
@@ -5622,7 +5616,7 @@ int btrfs_subvolume_reserve_metadata(struct btrfs_root *root, | |||
5622 | BTRFS_RESERVE_FLUSH_ALL); | 5616 | BTRFS_RESERVE_FLUSH_ALL); |
5623 | 5617 | ||
5624 | if (ret == -ENOSPC && use_global_rsv) | 5618 | if (ret == -ENOSPC && use_global_rsv) |
5625 | ret = btrfs_block_rsv_migrate(global_rsv, rsv, num_bytes); | 5619 | ret = btrfs_block_rsv_migrate(global_rsv, rsv, num_bytes, 1); |
5626 | 5620 | ||
5627 | if (ret && *qgroup_reserved) | 5621 | if (ret && *qgroup_reserved) |
5628 | btrfs_qgroup_free_meta(root, *qgroup_reserved); | 5622 | btrfs_qgroup_free_meta(root, *qgroup_reserved); |
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 2234e88cf674..f3f61d1ad18a 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -2479,7 +2479,7 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len) | |||
2479 | } | 2479 | } |
2480 | 2480 | ||
2481 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv, | 2481 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv, |
2482 | min_size); | 2482 | min_size, 0); |
2483 | BUG_ON(ret); | 2483 | BUG_ON(ret); |
2484 | trans->block_rsv = rsv; | 2484 | trans->block_rsv = rsv; |
2485 | 2485 | ||
@@ -2522,7 +2522,7 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len) | |||
2522 | } | 2522 | } |
2523 | 2523 | ||
2524 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, | 2524 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, |
2525 | rsv, min_size); | 2525 | rsv, min_size, 0); |
2526 | BUG_ON(ret); /* shouldn't happen */ | 2526 | BUG_ON(ret); /* shouldn't happen */ |
2527 | trans->block_rsv = rsv; | 2527 | trans->block_rsv = rsv; |
2528 | 2528 | ||
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 4421954720b8..3e61bd1f3f65 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -5264,7 +5264,7 @@ void btrfs_evict_inode(struct inode *inode) | |||
5264 | if (steal_from_global) { | 5264 | if (steal_from_global) { |
5265 | if (!btrfs_check_space_for_delayed_refs(trans, root)) | 5265 | if (!btrfs_check_space_for_delayed_refs(trans, root)) |
5266 | ret = btrfs_block_rsv_migrate(global_rsv, rsv, | 5266 | ret = btrfs_block_rsv_migrate(global_rsv, rsv, |
5267 | min_size); | 5267 | min_size, 0); |
5268 | else | 5268 | else |
5269 | ret = -ENOSPC; | 5269 | ret = -ENOSPC; |
5270 | } | 5270 | } |
@@ -9116,7 +9116,7 @@ static int btrfs_truncate(struct inode *inode) | |||
9116 | 9116 | ||
9117 | /* Migrate the slack space for the truncate to our reserve */ | 9117 | /* Migrate the slack space for the truncate to our reserve */ |
9118 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv, | 9118 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv, |
9119 | min_size); | 9119 | min_size, 0); |
9120 | BUG_ON(ret); | 9120 | BUG_ON(ret); |
9121 | 9121 | ||
9122 | /* | 9122 | /* |
@@ -9156,7 +9156,7 @@ static int btrfs_truncate(struct inode *inode) | |||
9156 | } | 9156 | } |
9157 | 9157 | ||
9158 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, | 9158 | ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, |
9159 | rsv, min_size); | 9159 | rsv, min_size, 0); |
9160 | BUG_ON(ret); /* shouldn't happen */ | 9160 | BUG_ON(ret); /* shouldn't happen */ |
9161 | trans->block_rsv = rsv; | 9161 | trans->block_rsv = rsv; |
9162 | } | 9162 | } |
@@ -9177,7 +9177,6 @@ static int btrfs_truncate(struct inode *inode) | |||
9177 | ret = btrfs_end_transaction(trans, root); | 9177 | ret = btrfs_end_transaction(trans, root); |
9178 | btrfs_btree_balance_dirty(root); | 9178 | btrfs_btree_balance_dirty(root); |
9179 | } | 9179 | } |
9180 | |||
9181 | out: | 9180 | out: |
9182 | btrfs_free_block_rsv(root, rsv); | 9181 | btrfs_free_block_rsv(root, rsv); |
9183 | 9182 | ||
diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c index 0477dca154ed..0bf3bc879503 100644 --- a/fs/btrfs/relocation.c +++ b/fs/btrfs/relocation.c | |||
@@ -4643,7 +4643,7 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans, | |||
4643 | if (rc->merge_reloc_tree) { | 4643 | if (rc->merge_reloc_tree) { |
4644 | ret = btrfs_block_rsv_migrate(&pending->block_rsv, | 4644 | ret = btrfs_block_rsv_migrate(&pending->block_rsv, |
4645 | rc->block_rsv, | 4645 | rc->block_rsv, |
4646 | rc->nodes_relocated); | 4646 | rc->nodes_relocated, 1); |
4647 | if (ret) | 4647 | if (ret) |
4648 | return ret; | 4648 | return ret; |
4649 | } | 4649 | } |