mirror of https://gitee.com/openkylin/linux.git
Btrfs: don't try to commit in btrfs_block_rsv_check
We will try and reserve metadata bytes in btrfs_block_rsv_check and if we cannot because we have a transaction open it will return EAGAIN, so we do not need to try and commit the transaction again. Signed-off-by: Josef Bacik <josef@redhat.com>
This commit is contained in:
parent
dabdb6408c
commit
13553e5221
|
@ -3708,7 +3708,6 @@ int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
|
||||||
u64 min_reserved, int min_factor)
|
u64 min_reserved, int min_factor)
|
||||||
{
|
{
|
||||||
u64 num_bytes = 0;
|
u64 num_bytes = 0;
|
||||||
int commit_trans = 0;
|
|
||||||
int ret = -ENOSPC;
|
int ret = -ENOSPC;
|
||||||
|
|
||||||
if (!block_rsv)
|
if (!block_rsv)
|
||||||
|
@ -3720,13 +3719,12 @@ int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
|
||||||
if (min_reserved > num_bytes)
|
if (min_reserved > num_bytes)
|
||||||
num_bytes = min_reserved;
|
num_bytes = min_reserved;
|
||||||
|
|
||||||
if (block_rsv->reserved >= num_bytes) {
|
if (block_rsv->reserved >= num_bytes)
|
||||||
ret = 0;
|
ret = 0;
|
||||||
} else {
|
else
|
||||||
num_bytes -= block_rsv->reserved;
|
num_bytes -= block_rsv->reserved;
|
||||||
commit_trans = 1;
|
|
||||||
}
|
|
||||||
spin_unlock(&block_rsv->lock);
|
spin_unlock(&block_rsv->lock);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -3736,26 +3734,7 @@ int btrfs_block_rsv_check(struct btrfs_trans_handle *trans,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commit_trans) {
|
return ret;
|
||||||
struct btrfs_space_info *sinfo = block_rsv->space_info;
|
|
||||||
|
|
||||||
if (trans)
|
|
||||||
return -EAGAIN;
|
|
||||||
|
|
||||||
spin_lock(&sinfo->lock);
|
|
||||||
if (sinfo->bytes_pinned < num_bytes) {
|
|
||||||
spin_unlock(&sinfo->lock);
|
|
||||||
return -ENOSPC;
|
|
||||||
}
|
|
||||||
spin_unlock(&sinfo->lock);
|
|
||||||
|
|
||||||
trans = btrfs_join_transaction(root);
|
|
||||||
BUG_ON(IS_ERR(trans));
|
|
||||||
ret = btrfs_commit_transaction(trans, root);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -ENOSPC;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
|
int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
|
||||||
|
|
Loading…
Reference in New Issue