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>
This commit is contained in:
parent
e40edf2da4
commit
25d609f86d
|
@ -2661,8 +2661,8 @@ int btrfs_block_rsv_refill(struct btrfs_root *root,
|
|||
struct btrfs_block_rsv *block_rsv, u64 min_reserved,
|
||||
enum btrfs_reserve_flush_enum flush);
|
||||
int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
|
||||
struct btrfs_block_rsv *dst_rsv,
|
||||
u64 num_bytes);
|
||||
struct btrfs_block_rsv *dst_rsv, u64 num_bytes,
|
||||
int update_size);
|
||||
int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info,
|
||||
struct btrfs_block_rsv *dest, u64 num_bytes,
|
||||
int min_factor);
|
||||
|
|
|
@ -553,7 +553,7 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,
|
|||
dst_rsv = &root->fs_info->delayed_block_rsv;
|
||||
|
||||
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) {
|
||||
trace_btrfs_space_reservation(root->fs_info, "delayed_item",
|
||||
item->key.objectid,
|
||||
|
@ -649,7 +649,7 @@ static int btrfs_delayed_inode_reserve_metadata(
|
|||
if (!ret)
|
||||
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)
|
||||
goto out;
|
||||
|
||||
|
@ -663,12 +663,12 @@ static int btrfs_delayed_inode_reserve_metadata(
|
|||
* since this really shouldn't happen that often.
|
||||
*/
|
||||
ret = btrfs_block_rsv_migrate(&root->fs_info->global_block_rsv,
|
||||
dst_rsv, num_bytes);
|
||||
dst_rsv, num_bytes, 1);
|
||||
goto out;
|
||||
}
|
||||
|
||||
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:
|
||||
/*
|
||||
|
|
|
@ -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,
|
||||
struct btrfs_block_rsv *dst, u64 num_bytes)
|
||||
int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src,
|
||||
struct btrfs_block_rsv *dst, u64 num_bytes,
|
||||
int update_size)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -5274,7 +5275,7 @@ static int block_rsv_migrate_bytes(struct btrfs_block_rsv *src,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
block_rsv_add_bytes(dst, num_bytes, 1);
|
||||
block_rsv_add_bytes(dst, num_bytes, update_size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -5381,13 +5382,6 @@ int btrfs_block_rsv_refill(struct btrfs_root *root,
|
|||
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,
|
||||
struct btrfs_block_rsv *block_rsv,
|
||||
u64 num_bytes)
|
||||
|
@ -5567,7 +5561,7 @@ int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
|
|||
u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
|
||||
trace_btrfs_space_reservation(root->fs_info, "orphan",
|
||||
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)
|
||||
|
@ -5622,7 +5616,7 @@ int btrfs_subvolume_reserve_metadata(struct btrfs_root *root,
|
|||
BTRFS_RESERVE_FLUSH_ALL);
|
||||
|
||||
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)
|
||||
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)
|
|||
}
|
||||
|
||||
ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
|
||||
min_size);
|
||||
min_size, 0);
|
||||
BUG_ON(ret);
|
||||
trans->block_rsv = rsv;
|
||||
|
||||
|
@ -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,
|
||||
rsv, min_size);
|
||||
rsv, min_size, 0);
|
||||
BUG_ON(ret); /* shouldn't happen */
|
||||
trans->block_rsv = rsv;
|
||||
|
||||
|
|
|
@ -5264,7 +5264,7 @@ void btrfs_evict_inode(struct inode *inode)
|
|||
if (steal_from_global) {
|
||||
if (!btrfs_check_space_for_delayed_refs(trans, root))
|
||||
ret = btrfs_block_rsv_migrate(global_rsv, rsv,
|
||||
min_size);
|
||||
min_size, 0);
|
||||
else
|
||||
ret = -ENOSPC;
|
||||
}
|
||||
|
@ -9116,7 +9116,7 @@ static int btrfs_truncate(struct inode *inode)
|
|||
|
||||
/* Migrate the slack space for the truncate to our reserve */
|
||||
ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
|
||||
min_size);
|
||||
min_size, 0);
|
||||
BUG_ON(ret);
|
||||
|
||||
/*
|
||||
|
@ -9156,7 +9156,7 @@ static int btrfs_truncate(struct inode *inode)
|
|||
}
|
||||
|
||||
ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv,
|
||||
rsv, min_size);
|
||||
rsv, min_size, 0);
|
||||
BUG_ON(ret); /* shouldn't happen */
|
||||
trans->block_rsv = rsv;
|
||||
}
|
||||
|
@ -9177,7 +9177,6 @@ static int btrfs_truncate(struct inode *inode)
|
|||
ret = btrfs_end_transaction(trans, root);
|
||||
btrfs_btree_balance_dirty(root);
|
||||
}
|
||||
|
||||
out:
|
||||
btrfs_free_block_rsv(root, rsv);
|
||||
|
||||
|
|
|
@ -4643,7 +4643,7 @@ int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
|
|||
if (rc->merge_reloc_tree) {
|
||||
ret = btrfs_block_rsv_migrate(&pending->block_rsv,
|
||||
rc->block_rsv,
|
||||
rc->nodes_relocated);
|
||||
rc->nodes_relocated, 1);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue