On Mon, Aug 5, 2019 at 3:47 PM Nikolay Borisov <nborisov@xxxxxxxx> wrote:
>
> Correctly handle failure cases when adding an ordered extents in case
> of REGULAR or PREALLOC extents.
>
> Signed-off-by: Nikolay Borisov <nborisov@xxxxxxxx>
Reviewed-by: Filipe Manana <fdmanana@xxxxxxxx>
It's correct, but:
> ---
> fs/btrfs/inode.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 6c3f9f3a7ed1..b935c301ca72 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -1569,16 +1569,26 @@ static noinline int run_delalloc_nocow(struct inode *inode,
> disk_bytenr, num_bytes,
> num_bytes,
> BTRFS_ORDERED_PREALLOC);
> + if (nocow)
> + btrfs_dec_nocow_writers(fs_info, disk_bytenr);
> + if (ret) {
> + btrfs_drop_extent_cache(BTRFS_I(inode),
> + cur_offset,
> + cur_offset + num_bytes - 1,
> + 0);
> + goto error;
> + }
> } else {
> ret = btrfs_add_ordered_extent(inode, cur_offset,
> disk_bytenr, num_bytes,
> num_bytes,
> BTRFS_ORDERED_NOCOW);
> + if (nocow)
> + btrfs_dec_nocow_writers(fs_info, disk_bytenr);
> + if (ret)
> + goto error;
We are now duplicating some error handling. Could be done like before,
outside the if branches.
> }
>
> - if (nocow)
> - btrfs_dec_nocow_writers(fs_info, disk_bytenr);
> - BUG_ON(ret); /* -ENOMEM */
Just replacing the BUG_ON(ret) with "if (ret) goto error;".
>
> if (root->root_key.objectid ==
> BTRFS_DATA_RELOC_TREE_OBJECTID)
> --
> 2.17.1
>
--
Filipe David Manana,
“Whether you think you can, or you think you can't — you're right.”