On Wed, Aug 08, 2012 at 12:12:59PM -0400, Josef Bacik wrote:
> Subvol delete is a special kind of awful where we use the global reserve to
> cover the ENOSPC requirements.  The problem is once we're done removing
> everything we do a btrfs_update_inode(), which by default will try to do the
> delayed update stuff which will use it's own reserve.  There will be no
> space in this reserve and we'll return ENOSPC.  So instead use
> btrfs_update_inode_fallback() which will just fallback to updating the inode
> item in the case of enospc.  This is fine because the global reserve covers
> the space requirements for this.  With this patch I can now delete a subvol
> on a problem image Dave Sterba sent me.  Thanks,

Thanks for the fix, tested on my side as well.

> Reported-by: David Sterba <[email protected]>
Tested-by: David Sterba <[email protected]>

> Signed-off-by: Josef Bacik <[email protected]>
> ---
>  fs/btrfs/inode.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 7ab714f..1a58373 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -3172,7 +3172,7 @@ int btrfs_unlink_subvol(struct btrfs_trans_handle 
> *trans,
>       btrfs_i_size_write(dir, dir->i_size - name_len * 2);
>       inode_inc_iversion(dir);
>       dir->i_mtime = dir->i_ctime = CURRENT_TIME;
> -     ret = btrfs_update_inode(trans, root, dir);
> +     ret = btrfs_update_inode_fallback(trans, root, dir);
>       if (ret)
>               btrfs_abort_transaction(trans, root, ret);
>  out:
> -- 
> 1.7.7.6
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to