btrfs: disable snapshot creation/deletion for extent tree v2
When we stop tracking metadata blocks all of snapshotting will break, so disable it until I add the snapshot root and drop tree support. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
da32c6d570
Коммит
813febdbe6
|
@ -4583,14 +4583,21 @@ out_up_write:
|
||||||
static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
{
|
{
|
||||||
struct inode *inode = d_inode(dentry);
|
struct inode *inode = d_inode(dentry);
|
||||||
|
struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
struct btrfs_trans_handle *trans;
|
struct btrfs_trans_handle *trans;
|
||||||
u64 last_unlink_trans;
|
u64 last_unlink_trans;
|
||||||
|
|
||||||
if (inode->i_size > BTRFS_EMPTY_DIR_SIZE)
|
if (inode->i_size > BTRFS_EMPTY_DIR_SIZE)
|
||||||
return -ENOTEMPTY;
|
return -ENOTEMPTY;
|
||||||
if (btrfs_ino(BTRFS_I(inode)) == BTRFS_FIRST_FREE_OBJECTID)
|
if (btrfs_ino(BTRFS_I(inode)) == BTRFS_FIRST_FREE_OBJECTID) {
|
||||||
|
if (unlikely(btrfs_fs_incompat(fs_info, EXTENT_TREE_V2))) {
|
||||||
|
btrfs_err(fs_info,
|
||||||
|
"extent tree v2 doesn't support snapshot deletion yet");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
return btrfs_delete_subvolume(dir, dentry);
|
return btrfs_delete_subvolume(dir, dentry);
|
||||||
|
}
|
||||||
|
|
||||||
trans = __unlink_start_trans(dir);
|
trans = __unlink_start_trans(dir);
|
||||||
if (IS_ERR(trans))
|
if (IS_ERR(trans))
|
||||||
|
@ -4629,7 +4636,7 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
btrfs_end_transaction(trans);
|
btrfs_end_transaction(trans);
|
||||||
btrfs_btree_balance_dirty(BTRFS_I(dir)->root->fs_info);
|
btrfs_btree_balance_dirty(fs_info);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -751,6 +751,13 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
|
||||||
struct btrfs_trans_handle *trans;
|
struct btrfs_trans_handle *trans;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
/* We do not support snapshotting right now. */
|
||||||
|
if (btrfs_fs_incompat(fs_info, EXTENT_TREE_V2)) {
|
||||||
|
btrfs_warn(fs_info,
|
||||||
|
"extent tree v2 doesn't support snapshotting yet");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state))
|
if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -3174,6 +3181,13 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
|
||||||
int err = 0;
|
int err = 0;
|
||||||
bool destroy_parent = false;
|
bool destroy_parent = false;
|
||||||
|
|
||||||
|
/* We don't support snapshots with extent tree v2 yet. */
|
||||||
|
if (btrfs_fs_incompat(fs_info, EXTENT_TREE_V2)) {
|
||||||
|
btrfs_err(fs_info,
|
||||||
|
"extent tree v2 doesn't support snapshot deletion yet");
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
if (destroy_v2) {
|
if (destroy_v2) {
|
||||||
vol_args2 = memdup_user(arg, sizeof(*vol_args2));
|
vol_args2 = memdup_user(arg, sizeof(*vol_args2));
|
||||||
if (IS_ERR(vol_args2))
|
if (IS_ERR(vol_args2))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче