]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: add attr state machine tracepoints
authorAllison Henderson <allison.henderson@oracle.com>
Mon, 31 Jan 2022 20:25:47 +0000 (15:25 -0500)
committerEric Sandeen <sandeen@redhat.com>
Mon, 31 Jan 2022 20:25:47 +0000 (15:25 -0500)
Source kernel commit: df0826312a23e495faa91eee0d6ac31bca35dc09

This is a quick patch to add a new xfs_attr_*_return tracepoints.  We
use these to track when ever a new state is set or -EAGAIN is returned

Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
include/xfs_trace.h
libxfs/xfs_attr.c
libxfs/xfs_attr_remote.c

index a1002638f39a2354f3e372f843b47546e68a6608..79743f0457e4367fda0bec078b9428a8552c9203 100644 (file)
 #define trace_xfs_alloc_vextent_loopfailed(a)  ((void) 0)
 #define trace_xfs_alloc_vextent_allfailed(a)   ((void) 0)
 
+#define trace_xfs_attr_sf_addname_return(...)  ((void) 0)
+#define trace_xfs_attr_set_iter_return(...)    ((void) 0)
+#define trace_xfs_attr_node_addname_return(...)        ((void) 0)
+#define trace_xfs_attr_remove_iter_return(...) ((void) 0)
+#define trace_xfs_attr_rmtval_remove_return(...) ((void) 0)
+
 #define trace_xfs_log_recover_item_add_cont(a,b,c,d)   ((void) 0)
 #define trace_xfs_log_recover_item_add(a,b,c,d)        ((void) 0)
 
index 80a6a96fe2d3b5ac351d2f01c9b8deb4d5f18023..354c7c3fd38b465ee6a45ebb1bc220df971f1d1b 100644 (file)
@@ -335,6 +335,7 @@ xfs_attr_sf_addname(
         * the attr fork to leaf format and will restart with the leaf
         * add.
         */
+       trace_xfs_attr_sf_addname_return(XFS_DAS_UNINIT, args->dp);
        dac->flags |= XFS_DAC_DEFER_FINISH;
        return -EAGAIN;
 }
@@ -394,6 +395,8 @@ xfs_attr_set_iter(
                                 * handling code below
                                 */
                                dac->flags |= XFS_DAC_DEFER_FINISH;
+                               trace_xfs_attr_set_iter_return(
+                                       dac->dela_state, args->dp);
                                return -EAGAIN;
                        } else if (error) {
                                return error;
@@ -411,6 +414,7 @@ xfs_attr_set_iter(
 
                        dac->dela_state = XFS_DAS_FOUND_NBLK;
                }
+               trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
                return -EAGAIN;
        case XFS_DAS_FOUND_LBLK:
                /*
@@ -438,6 +442,8 @@ xfs_attr_set_iter(
                        error = xfs_attr_rmtval_set_blk(dac);
                        if (error)
                                return error;
+                       trace_xfs_attr_set_iter_return(dac->dela_state,
+                                                      args->dp);
                        return -EAGAIN;
                }
 
@@ -472,6 +478,7 @@ xfs_attr_set_iter(
                 * series.
                 */
                dac->dela_state = XFS_DAS_FLIP_LFLAG;
+               trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
                return -EAGAIN;
        case XFS_DAS_FLIP_LFLAG:
                /*
@@ -489,10 +496,14 @@ xfs_attr_set_iter(
                dac->dela_state = XFS_DAS_RM_LBLK;
                if (args->rmtblkno) {
                        error = __xfs_attr_rmtval_remove(dac);
+                       if (error == -EAGAIN)
+                               trace_xfs_attr_set_iter_return(
+                                       dac->dela_state, args->dp);
                        if (error)
                                return error;
 
                        dac->dela_state = XFS_DAS_RD_LEAF;
+                       trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
                        return -EAGAIN;
                }
 
@@ -542,6 +553,8 @@ xfs_attr_set_iter(
                                error = xfs_attr_rmtval_set_blk(dac);
                                if (error)
                                        return error;
+                               trace_xfs_attr_set_iter_return(
+                                       dac->dela_state, args->dp);
                                return -EAGAIN;
                        }
 
@@ -577,6 +590,7 @@ xfs_attr_set_iter(
                 * series
                 */
                dac->dela_state = XFS_DAS_FLIP_NFLAG;
+               trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
                return -EAGAIN;
 
        case XFS_DAS_FLIP_NFLAG:
@@ -596,10 +610,15 @@ xfs_attr_set_iter(
                dac->dela_state = XFS_DAS_RM_NBLK;
                if (args->rmtblkno) {
                        error = __xfs_attr_rmtval_remove(dac);
+                       if (error == -EAGAIN)
+                               trace_xfs_attr_set_iter_return(
+                                       dac->dela_state, args->dp);
+
                        if (error)
                                return error;
 
                        dac->dela_state = XFS_DAS_CLR_FLAG;
+                       trace_xfs_attr_set_iter_return(dac->dela_state, args->dp);
                        return -EAGAIN;
                }
 
@@ -1176,6 +1195,8 @@ xfs_attr_node_addname(
                         * this point.
                         */
                        dac->flags |= XFS_DAC_DEFER_FINISH;
+                       trace_xfs_attr_node_addname_return(
+                                       dac->dela_state, args->dp);
                        return -EAGAIN;
                }
 
@@ -1422,10 +1443,13 @@ xfs_attr_remove_iter(
                         * blocks are removed.
                         */
                        error = __xfs_attr_rmtval_remove(dac);
-                       if (error == -EAGAIN)
+                       if (error == -EAGAIN) {
+                               trace_xfs_attr_remove_iter_return(
+                                               dac->dela_state, args->dp);
                                return error;
-                       else if (error)
+                       } else if (error) {
                                goto out;
+                       }
 
                        /*
                         * Refill the state structure with buffers (the prior
@@ -1438,6 +1462,7 @@ xfs_attr_remove_iter(
                                goto out;
                        dac->dela_state = XFS_DAS_RM_NAME;
                        dac->flags |= XFS_DAC_DEFER_FINISH;
+                       trace_xfs_attr_remove_iter_return(dac->dela_state, args->dp);
                        return -EAGAIN;
                }
 
@@ -1466,6 +1491,8 @@ xfs_attr_remove_iter(
 
                        dac->flags |= XFS_DAC_DEFER_FINISH;
                        dac->dela_state = XFS_DAS_RM_SHRINK;
+                       trace_xfs_attr_remove_iter_return(
+                                       dac->dela_state, args->dp);
                        return -EAGAIN;
                }
 
index d474ad7d969ddf4093aa8272dc4070bab50f37a5..137e5698c15db0981708f728e62249b32de20127 100644 (file)
@@ -695,6 +695,7 @@ __xfs_attr_rmtval_remove(
         */
        if (!done) {
                dac->flags |= XFS_DAC_DEFER_FINISH;
+               trace_xfs_attr_rmtval_remove_return(dac->dela_state, args->dp);
                return -EAGAIN;
        }