提交 25d609f8 编写于 作者: J Josef Bacik 提交者: David Sterba

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: NJosef Bacik <jbacik@fb.com>
Signed-off-by: NDavid Sterba <dsterba@suse.com>
上级 e40edf2d
...@@ -2661,8 +2661,8 @@ int btrfs_block_rsv_refill(struct btrfs_root *root, ...@@ -2661,8 +2661,8 @@ int btrfs_block_rsv_refill(struct btrfs_root *root,
struct btrfs_block_rsv *block_rsv, u64 min_reserved, struct btrfs_block_rsv *block_rsv, u64 min_reserved,
enum btrfs_reserve_flush_enum flush); enum btrfs_reserve_flush_enum flush);
int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv, int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
struct btrfs_block_rsv *dst_rsv, struct btrfs_block_rsv *dst_rsv, u64 num_bytes,
u64 num_bytes); int update_size);
int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info, int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info,
struct btrfs_block_rsv *dest, u64 num_bytes, struct btrfs_block_rsv *dest, u64 num_bytes,
int min_factor); int min_factor);
......
...@@ -553,7 +553,7 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans, ...@@ -553,7 +553,7 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,
dst_rsv = &root->fs_info->delayed_block_rsv; dst_rsv = &root->fs_info->delayed_block_rsv;
num_bytes = btrfs_calc_trans_metadata_size(root, 1); num_bytes = btrfs_calc_trans_metadata_size(root, 1);
ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes); ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
if (!ret) { if (!ret) {
trace_btrfs_space_reservation(root->fs_info, "delayed_item", trace_btrfs_space_reservation(root->fs_info, "delayed_item",
item->key.objectid, item->key.objectid,
...@@ -649,7 +649,7 @@ static int btrfs_delayed_inode_reserve_metadata( ...@@ -649,7 +649,7 @@ static int btrfs_delayed_inode_reserve_metadata(
if (!ret) if (!ret)
goto out; goto out;
ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes); ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
if (!ret) if (!ret)
goto out; goto out;
...@@ -663,12 +663,12 @@ static int btrfs_delayed_inode_reserve_metadata( ...@@ -663,12 +663,12 @@ static int btrfs_delayed_inode_reserve_metadata(
* since this really shouldn't happen that often. * since this really shouldn't happen that often.
*/ */
ret = btrfs_block_rsv_migrate(&root->fs_info->global_block_rsv, ret = btrfs_block_rsv_migrate(&root->fs_info->global_block_rsv,
dst_rsv, num_bytes); dst_rsv, num_bytes, 1);
goto out; goto out;
} }
migrate: migrate:
ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes); ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
out: out:
/* /*
......
...@@ -5265,8 +5265,9 @@ static void block_rsv_release_bytes(struct btrfs_fs_info *fs_info, ...@@ -5265,8 +5265,9 @@ static void block_rsv_release_bytes(struct btrfs_fs_info *fs_info,
} }
} }
static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src, int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src,
struct btrfs_block_rsv *dst, u64 num_bytes) struct btrfs_block_rsv *dst, u64 num_bytes,
int update_size)
{ {
int ret; int ret;
...@@ -5274,7 +5275,7 @@ static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src, ...@@ -5274,7 +5275,7 @@ static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src,
if (ret) if (ret)
return ret; return ret;
block_rsv_add_bytes(dst, num_bytes, 1); block_rsv_add_bytes(dst, num_bytes, update_size);
return 0; return 0;
} }
...@@ -5381,13 +5382,6 @@ int btrfs_block_rsv_refill(struct btrfs_root *root, ...@@ -5381,13 +5382,6 @@ int btrfs_block_rsv_refill(struct btrfs_root *root,
return ret; return ret;
} }
int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
struct btrfs_block_rsv *dst_rsv,
u64 num_bytes)
{
return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
}
void btrfs_block_rsv_release(struct btrfs_root *root, void btrfs_block_rsv_release(struct btrfs_root *root,
struct btrfs_block_rsv *block_rsv, struct btrfs_block_rsv *block_rsv,
u64 num_bytes) u64 num_bytes)
...@@ -5567,7 +5561,7 @@ int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans, ...@@ -5567,7 +5561,7 @@ int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1); u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
trace_btrfs_space_reservation(root->fs_info, "orphan", trace_btrfs_space_reservation(root->fs_info, "orphan",
btrfs_ino(inode), num_bytes, 1); btrfs_ino(inode), num_bytes, 1);
return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes); return btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
} }
void btrfs_orphan_release_metadata(struct inode *inode) void btrfs_orphan_release_metadata(struct inode *inode)
...@@ -5622,7 +5616,7 @@ int btrfs_subvolume_reserve_metadata(struct btrfs_root *root, ...@@ -5622,7 +5616,7 @@ int btrfs_subvolume_reserve_metadata(struct btrfs_root *root,
BTRFS_RESERVE_FLUSH_ALL); BTRFS_RESERVE_FLUSH_ALL);
if (ret == -ENOSPC && use_global_rsv) if (ret == -ENOSPC && use_global_rsv)
ret = btrfs_block_rsv_migrate(global_rsv, rsv, num_bytes); ret = btrfs_block_rsv_migrate(global_rsv, rsv, num_bytes, 1);
if (ret && *qgroup_reserved) if (ret && *qgroup_reserved)
btrfs_qgroup_free_meta(root, *qgroup_reserved); btrfs_qgroup_free_meta(root, *qgroup_reserved);
......
...@@ -2479,7 +2479,7 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len) ...@@ -2479,7 +2479,7 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
} }
ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv, ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
min_size); min_size, 0);
BUG_ON(ret); BUG_ON(ret);
trans->block_rsv = rsv; trans->block_rsv = rsv;
...@@ -2522,7 +2522,7 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len) ...@@ -2522,7 +2522,7 @@ static int btrfs_punch_hole(struct inode *inode, loff_t offset, loff_t len)
} }
ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv,
rsv, min_size); rsv, min_size, 0);
BUG_ON(ret); /* shouldn't happen */ BUG_ON(ret); /* shouldn't happen */
trans->block_rsv = rsv; trans->block_rsv = rsv;
......
...@@ -5264,7 +5264,7 @@ void btrfs_evict_inode(struct inode *inode) ...@@ -5264,7 +5264,7 @@ void btrfs_evict_inode(struct inode *inode)
if (steal_from_global) { if (steal_from_global) {
if (!btrfs_check_space_for_delayed_refs(trans, root)) if (!btrfs_check_space_for_delayed_refs(trans, root))
ret = btrfs_block_rsv_migrate(global_rsv, rsv, ret = btrfs_block_rsv_migrate(global_rsv, rsv,
min_size); min_size, 0);
else else
ret = -ENOSPC; ret = -ENOSPC;
} }
...@@ -9116,7 +9116,7 @@ static int btrfs_truncate(struct inode *inode) ...@@ -9116,7 +9116,7 @@ static int btrfs_truncate(struct inode *inode)
/* Migrate the slack space for the truncate to our reserve */ /* Migrate the slack space for the truncate to our reserve */
ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv, ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
min_size); min_size, 0);
BUG_ON(ret); BUG_ON(ret);
/* /*
...@@ -9156,7 +9156,7 @@ static int btrfs_truncate(struct inode *inode) ...@@ -9156,7 +9156,7 @@ static int btrfs_truncate(struct inode *inode)
} }
ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv,
rsv, min_size); rsv, min_size, 0);
BUG_ON(ret); /* shouldn't happen */ BUG_ON(ret); /* shouldn't happen */
trans->block_rsv = rsv; trans->block_rsv = rsv;
} }
...@@ -9177,7 +9177,6 @@ static int btrfs_truncate(struct inode *inode) ...@@ -9177,7 +9177,6 @@ static int btrfs_truncate(struct inode *inode)
ret = btrfs_end_transaction(trans, root); ret = btrfs_end_transaction(trans, root);
btrfs_btree_balance_dirty(root); btrfs_btree_balance_dirty(root);
} }
out: out:
btrfs_free_block_rsv(root, rsv); btrfs_free_block_rsv(root, rsv);
......
...@@ -4643,7 +4643,7 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans, ...@@ -4643,7 +4643,7 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
if (rc->merge_reloc_tree) { if (rc->merge_reloc_tree) {
ret = btrfs_block_rsv_migrate(&pending->block_rsv, ret = btrfs_block_rsv_migrate(&pending->block_rsv,
rc->block_rsv, rc->block_rsv,
rc->nodes_relocated); rc->nodes_relocated, 1);
if (ret) if (ret)
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册