]> git.itanic.dy.fi Git - linux-stable/commitdiff
xfs: consolidate the xfs_attr_defer_* helpers
authorChristoph Hellwig <hch@lst.de>
Wed, 13 Dec 2023 09:06:29 +0000 (10:06 +0100)
committerChandan Babu R <chandanbabu@kernel.org>
Thu, 14 Dec 2023 05:40:33 +0000 (11:10 +0530)
Consolidate the xfs_attr_defer_* helpers into a single xfs_attr_defer_add
one that picks the right dela_state based on the passed in operation.
Also move to a single trace point as the actual operation is visible
through the flags in the delta_state passed to the trace point.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
fs/xfs/libxfs/xfs_attr.c
fs/xfs/xfs_trace.h

index e28d93d232de49e18dad3fe5c02843ea6addd34a..4fed0c87a968ab1e5216ec67ddc28347122b3e73 100644 (file)
@@ -880,11 +880,10 @@ xfs_attr_lookup(
        return error;
 }
 
-static int
-xfs_attr_intent_init(
+static void
+xfs_attr_defer_add(
        struct xfs_da_args      *args,
-       unsigned int            op_flags,       /* op flag (set or remove) */
-       struct xfs_attr_intent  **attr)         /* new xfs_attr_intent */
+       unsigned int            op_flags)
 {
 
        struct xfs_attr_intent  *new;
@@ -893,66 +892,22 @@ xfs_attr_intent_init(
        new->xattri_op_flags = op_flags;
        new->xattri_da_args = args;
 
-       *attr = new;
-       return 0;
-}
-
-/* Sets an attribute for an inode as a deferred operation */
-static int
-xfs_attr_defer_add(
-       struct xfs_da_args      *args)
-{
-       struct xfs_attr_intent  *new;
-       int                     error = 0;
-
-       error = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_SET, &new);
-       if (error)
-               return error;
+       switch (op_flags) {
+       case XFS_ATTRI_OP_FLAGS_SET:
+               new->xattri_dela_state = xfs_attr_init_add_state(args);
+               break;
+       case XFS_ATTRI_OP_FLAGS_REPLACE:
+               new->xattri_dela_state = xfs_attr_init_replace_state(args);
+               break;
+       case XFS_ATTRI_OP_FLAGS_REMOVE:
+               new->xattri_dela_state = xfs_attr_init_remove_state(args);
+               break;
+       default:
+               ASSERT(0);
+       }
 
-       new->xattri_dela_state = xfs_attr_init_add_state(args);
        xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list);
        trace_xfs_attr_defer_add(new->xattri_dela_state, args->dp);
-
-       return 0;
-}
-
-/* Sets an attribute for an inode as a deferred operation */
-static int
-xfs_attr_defer_replace(
-       struct xfs_da_args      *args)
-{
-       struct xfs_attr_intent  *new;
-       int                     error = 0;
-
-       error = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_REPLACE, &new);
-       if (error)
-               return error;
-
-       new->xattri_dela_state = xfs_attr_init_replace_state(args);
-       xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list);
-       trace_xfs_attr_defer_replace(new->xattri_dela_state, args->dp);
-
-       return 0;
-}
-
-/* Removes an attribute for an inode as a deferred operation */
-static int
-xfs_attr_defer_remove(
-       struct xfs_da_args      *args)
-{
-
-       struct xfs_attr_intent  *new;
-       int                     error;
-
-       error  = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_REMOVE, &new);
-       if (error)
-               return error;
-
-       new->xattri_dela_state = xfs_attr_init_remove_state(args);
-       xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list);
-       trace_xfs_attr_defer_remove(new->xattri_dela_state, args->dp);
-
-       return 0;
 }
 
 /*
@@ -1038,16 +993,16 @@ xfs_attr_set(
        error = xfs_attr_lookup(args);
        switch (error) {
        case -EEXIST:
-               /* if no value, we are performing a remove operation */
                if (!args->value) {
-                       error = xfs_attr_defer_remove(args);
+                       /* if no value, we are performing a remove operation */
+                       xfs_attr_defer_add(args, XFS_ATTRI_OP_FLAGS_REMOVE);
                        break;
                }
+
                /* Pure create fails if the attr already exists */
                if (args->attr_flags & XATTR_CREATE)
                        goto out_trans_cancel;
-
-               error = xfs_attr_defer_replace(args);
+               xfs_attr_defer_add(args, XFS_ATTRI_OP_FLAGS_REPLACE);
                break;
        case -ENOATTR:
                /* Can't remove what isn't there. */
@@ -1057,14 +1012,11 @@ xfs_attr_set(
                /* Pure replace fails if no existing attr to replace. */
                if (args->attr_flags & XATTR_REPLACE)
                        goto out_trans_cancel;
-
-               error = xfs_attr_defer_add(args);
+               xfs_attr_defer_add(args, XFS_ATTRI_OP_FLAGS_SET);
                break;
        default:
                goto out_trans_cancel;
        }
-       if (error)
-               goto out_trans_cancel;
 
        /*
         * If this is a synchronous mount, make sure that the
index 514095b6ba2bdb8191d5df3cd44a404b64eeefba..516529c151ae1c598fbba35911118b417f867aa8 100644 (file)
@@ -4408,8 +4408,6 @@ DEFINE_DAS_STATE_EVENT(xfs_attr_remove_iter_return);
 DEFINE_DAS_STATE_EVENT(xfs_attr_rmtval_alloc);
 DEFINE_DAS_STATE_EVENT(xfs_attr_rmtval_remove_return);
 DEFINE_DAS_STATE_EVENT(xfs_attr_defer_add);
-DEFINE_DAS_STATE_EVENT(xfs_attr_defer_replace);
-DEFINE_DAS_STATE_EVENT(xfs_attr_defer_remove);
 
 
 TRACE_EVENT(xfs_force_shutdown,