Merge branch 'for-linus-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
Pull btrfs fixes from Chris Mason: "Josef fixed a problem when quotas are enabled with his latest ENOSPC rework, and Jeff added more checks into the subvol ioctls to avoid tripping up lookup_one_len" * 'for-linus-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: btrfs: ensure that file descriptor used with subvol ioctls is a dir Btrfs: handle quota reserve failure properly
This commit is contained in:
commit
b22734a550
@ -4271,13 +4271,10 @@ int btrfs_check_data_free_space(struct inode *inode, u64 start, u64 len)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/*
|
/* Use new btrfs_qgroup_reserve_data to reserve precious data space. */
|
||||||
* Use new btrfs_qgroup_reserve_data to reserve precious data space
|
|
||||||
*
|
|
||||||
* TODO: Find a good method to avoid reserve data space for NOCOW
|
|
||||||
* range, but don't impact performance on quota disable case.
|
|
||||||
*/
|
|
||||||
ret = btrfs_qgroup_reserve_data(inode, start, len);
|
ret = btrfs_qgroup_reserve_data(inode, start, len);
|
||||||
|
if (ret)
|
||||||
|
btrfs_free_reserved_data_space_noquota(inode, start, len);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1634,6 +1634,9 @@ static noinline int btrfs_ioctl_snap_create_transid(struct file *file,
|
|||||||
int namelen;
|
int namelen;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
if (!S_ISDIR(file_inode(file)->i_mode))
|
||||||
|
return -ENOTDIR;
|
||||||
|
|
||||||
ret = mnt_want_write_file(file);
|
ret = mnt_want_write_file(file);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
@ -1691,6 +1694,9 @@ static noinline int btrfs_ioctl_snap_create(struct file *file,
|
|||||||
struct btrfs_ioctl_vol_args *vol_args;
|
struct btrfs_ioctl_vol_args *vol_args;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!S_ISDIR(file_inode(file)->i_mode))
|
||||||
|
return -ENOTDIR;
|
||||||
|
|
||||||
vol_args = memdup_user(arg, sizeof(*vol_args));
|
vol_args = memdup_user(arg, sizeof(*vol_args));
|
||||||
if (IS_ERR(vol_args))
|
if (IS_ERR(vol_args))
|
||||||
return PTR_ERR(vol_args);
|
return PTR_ERR(vol_args);
|
||||||
@ -1714,6 +1720,9 @@ static noinline int btrfs_ioctl_snap_create_v2(struct file *file,
|
|||||||
bool readonly = false;
|
bool readonly = false;
|
||||||
struct btrfs_qgroup_inherit *inherit = NULL;
|
struct btrfs_qgroup_inherit *inherit = NULL;
|
||||||
|
|
||||||
|
if (!S_ISDIR(file_inode(file)->i_mode))
|
||||||
|
return -ENOTDIR;
|
||||||
|
|
||||||
vol_args = memdup_user(arg, sizeof(*vol_args));
|
vol_args = memdup_user(arg, sizeof(*vol_args));
|
||||||
if (IS_ERR(vol_args))
|
if (IS_ERR(vol_args))
|
||||||
return PTR_ERR(vol_args);
|
return PTR_ERR(vol_args);
|
||||||
@ -2357,6 +2366,9 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
|
|||||||
int ret;
|
int ret;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
|
if (!S_ISDIR(dir->i_mode))
|
||||||
|
return -ENOTDIR;
|
||||||
|
|
||||||
vol_args = memdup_user(arg, sizeof(*vol_args));
|
vol_args = memdup_user(arg, sizeof(*vol_args));
|
||||||
if (IS_ERR(vol_args))
|
if (IS_ERR(vol_args))
|
||||||
return PTR_ERR(vol_args);
|
return PTR_ERR(vol_args);
|
||||||
|
Loading…
Reference in New Issue
Block a user