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:
Dave Chinner 2015-02-02 10:15:56 +11:00 коммит произвёл Dave Chinner
Родитель 8f3d17ab06
Коммит f96291f6a3
1 изменённых файлов: 18 добавлений и 5 удалений

Просмотреть файл

@ -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;
@ -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;
}