Skip to content

Commit

Permalink
xfs: disaggregate xfs_ioctl_setattr
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Dave Chinner authored and Dave Chinner committed Feb 1, 2015
1 parent 8f3d17a commit f96291f
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions fs/xfs/xfs_ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1324,14 +1324,14 @@ xfs_ioc_getxflags(

STATIC int
xfs_ioc_setxflags(
xfs_inode_t *ip,
struct xfs_inode *ip,
struct file *filp,
void __user *arg)
{
struct xfs_trans *tp;
struct fsxattr fa;
unsigned int flags;
unsigned int mask;
int error;
int error;

if (copy_from_user(&flags, arg, sizeof(flags)))
return -EFAULT;
Expand All @@ -1341,13 +1341,26 @@ xfs_ioc_setxflags(
FS_SYNC_FL))
return -EOPNOTSUPP;

mask = FSX_XFLAGS;
fa.fsx_xflags = xfs_merge_ioc_xflags(flags, xfs_ip2xflags(ip));

error = mnt_want_write_file(filp);
if (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);
return error;
}
Expand Down

0 comments on commit f96291f

Please sign in to comment.