xfs: disaggregate xfs_ioctl_setattr
xfs_ioctl_setxflags doesn't need all of the functionailty in xfs_ioctl_setattr() and now we have separate helper functions that share the checks and modifications that xfs_ioctl_setxflags requires. Hence disaggregate it from xfs_ioctl_setattr() to allow further work to be done on xfs_ioctl_setattr. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
8f3d17ab06
commit
f96291f6a3
1 changed files with 18 additions and 5 deletions
|
@ -1324,14 +1324,14 @@ xfs_ioc_getxflags(
|
||||||
|
|
||||||
STATIC int
|
STATIC int
|
||||||
xfs_ioc_setxflags(
|
xfs_ioc_setxflags(
|
||||||
xfs_inode_t *ip,
|
struct xfs_inode *ip,
|
||||||
struct file *filp,
|
struct file *filp,
|
||||||
void __user *arg)
|
void __user *arg)
|
||||||
{
|
{
|
||||||
|
struct xfs_trans *tp;
|
||||||
struct fsxattr fa;
|
struct fsxattr fa;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
unsigned int mask;
|
int error;
|
||||||
int error;
|
|
||||||
|
|
||||||
if (copy_from_user(&flags, arg, sizeof(flags)))
|
if (copy_from_user(&flags, arg, sizeof(flags)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
@ -1341,13 +1341,26 @@ xfs_ioc_setxflags(
|
||||||
FS_SYNC_FL))
|
FS_SYNC_FL))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
mask = FSX_XFLAGS;
|
|
||||||
fa.fsx_xflags = xfs_merge_ioc_xflags(flags, xfs_ip2xflags(ip));
|
fa.fsx_xflags = xfs_merge_ioc_xflags(flags, xfs_ip2xflags(ip));
|
||||||
|
|
||||||
error = mnt_want_write_file(filp);
|
error = mnt_want_write_file(filp);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
error = xfs_ioctl_setattr(ip, &fa, mask);
|
|
||||||
|
tp = xfs_ioctl_setattr_get_trans(ip);
|
||||||
|
if (IS_ERR(tp)) {
|
||||||
|
error = PTR_ERR(tp);
|
||||||
|
goto out_drop_write;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = xfs_ioctl_setattr_xflags(tp, ip, &fa);
|
||||||
|
if (error) {
|
||||||
|
xfs_trans_cancel(tp, 0);
|
||||||
|
goto out_drop_write;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = xfs_trans_commit(tp, 0);
|
||||||
|
out_drop_write:
|
||||||
mnt_drop_write_file(filp);
|
mnt_drop_write_file(filp);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue