xfs
[Top] [All Lists]

[PATCH 4/9] xfs: disaggregate xfs_ioctl_setattr

To: xfs@xxxxxxxxxxx
Subject: [PATCH 4/9] xfs: disaggregate xfs_ioctl_setattr
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Tue, 27 Jan 2015 14:14:41 +1100
Cc: iustin@xxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1422328486-24661-1-git-send-email-david@xxxxxxxxxxxxx>
References: <1422328486-24661-1-git-send-email-david@xxxxxxxxxxxxx>
From: Dave Chinner <dchinner@xxxxxxxxxx>

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@xxxxxxxxxx>
---
 fs/xfs/xfs_ioctl.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
index d06f596..c71f32d 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -1321,14 +1321,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;
@@ -1338,13 +1338,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;
 }
-- 
2.0.0

<Prev in Thread] Current Thread [Next in Thread>