aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@fb.com>2016-03-25 13:25:48 -0400
committerDavid Sterba <dsterba@suse.com>2016-07-07 12:45:53 -0400
commit25d609f86d6808eb1f0e8a6cafc3edb4a2b5ae35 (patch)
tree24b8d9a911aa57675c5ade8f46028d32e77c521a
parente40edf2da4fc6ab10c707b0522372b08b38171e6 (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.h4
-rw-r--r--fs/btrfs/delayed-inode.c8
-rw-r--r--fs/btrfs/extent-tree.c18
-rw-r--r--fs/btrfs/file.c4
-rw-r--r--fs/btrfs/inode.c7
-rw-r--r--fs/btrfs/relocation.c2
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);
2663int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, 2663int 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);
2666int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info, 2666int 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
670migrate: 670migrate:
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
673out: 673out:
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
5268static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src, 5268int 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
5384int 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
5391void btrfs_block_rsv_release(struct btrfs_root *root, 5385void 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
5573void btrfs_orphan_release_metadata(struct inode *inode) 5567void 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
9181out: 9180out:
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 }