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
