diff --git a/[refs] b/[refs] index f3ab09bff844..de3fa7ebb490 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b24e03db0df3e9164c9649db12fecc8c2d81b0d1 +refs/heads/master: 3880a1b46d87a6b030c31889875befc745d95dff diff --git a/trunk/fs/btrfs/inode.c b/trunk/fs/btrfs/inode.c index 1f013c5c36aa..b6b70bdd0992 100644 --- a/trunk/fs/btrfs/inode.c +++ b/trunk/fs/btrfs/inode.c @@ -2790,7 +2790,8 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir, return ERR_PTR(-ENOMEM); } - trans = btrfs_start_transaction(root, 0); + /* 1 for the orphan item */ + trans = btrfs_start_transaction(root, 1); if (IS_ERR(trans)) { btrfs_free_path(path); root->fs_info->enospc_unlink = 0; @@ -2895,6 +2896,12 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir, err = 0; out: btrfs_free_path(path); + /* Migrate the orphan reservation over */ + if (!err) + err = btrfs_block_rsv_migrate(trans->block_rsv, + &root->fs_info->global_block_rsv, + btrfs_calc_trans_metadata_size(root, 1)); + if (err) { btrfs_end_transaction(trans, root); root->fs_info->enospc_unlink = 0;