mirror of
https://github.com/torvalds/linux.git
synced 2024-12-11 13:41:55 +00:00
btrfs: simplify code flow in btrfs_delayed_inode_reserve_metadata
btrfs_block_rsv_add can return only ENOSPC since it's called with NO_FLUSH modifier. This so simplify the logic in btrfs_delayed_inode_reserve_metadata to exploit this invariant. Signed-off-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> [ add assert and comment ] Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
8e3c9d3cf8
commit
98686ffc71
@ -632,29 +632,14 @@ static int btrfs_delayed_inode_reserve_metadata(
|
||||
return ret;
|
||||
ret = btrfs_block_rsv_add(root, dst_rsv, num_bytes,
|
||||
BTRFS_RESERVE_NO_FLUSH);
|
||||
/*
|
||||
* Since we're under a transaction reserve_metadata_bytes could
|
||||
* try to commit the transaction which will make it return
|
||||
* EAGAIN to make us stop the transaction we have, so return
|
||||
* ENOSPC instead so that btrfs_dirty_inode knows what to do.
|
||||
*/
|
||||
if (ret == -EAGAIN) {
|
||||
ret = -ENOSPC;
|
||||
/* NO_FLUSH could only fail with -ENOSPC */
|
||||
ASSERT(ret == 0 || ret == -ENOSPC);
|
||||
if (ret)
|
||||
btrfs_qgroup_free_meta_prealloc(root, num_bytes);
|
||||
}
|
||||
if (!ret) {
|
||||
node->bytes_reserved = num_bytes;
|
||||
trace_btrfs_space_reservation(fs_info,
|
||||
"delayed_inode",
|
||||
node->inode_id,
|
||||
num_bytes, 1);
|
||||
} else {
|
||||
btrfs_qgroup_free_meta_prealloc(root, num_bytes);
|
||||
}
|
||||
return ret;
|
||||
} else {
|
||||
ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, true);
|
||||
}
|
||||
|
||||
ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, true);
|
||||
if (!ret) {
|
||||
trace_btrfs_space_reservation(fs_info, "delayed_inode",
|
||||
node->inode_id, num_bytes, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user