]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs: add tracepoints and error injection for deferred extent freeing
authorDarrick J. Wong <darrick.wong@oracle.com>
Wed, 10 Aug 2016 01:35:59 +0000 (11:35 +1000)
committerDave Chinner <david@fromorbit.com>
Wed, 10 Aug 2016 01:35:59 +0000 (11:35 +1000)
Source kernel commit: ba9e780246a15a35f8ebe5b60f4a11bb58e85bda

Add a couple of tracepoints for the deferred extent free operation and
a site for injecting errors while finishing the operation.  This makes
it easier to debug deferred ops and test log redo.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
include/xfs_trace.h
libxfs/xfs_alloc.c
libxfs/xfs_bmap.c

index 4de187ef055b2070b01dc4888f7ed37313036d89..aa032328915ad6c5f2f1e9a967e46b32eb75ef35 100644 (file)
 #define trace_xfs_defer_finish_error(a,b,c)    ((void) 0)
 #define trace_xfs_defer_finish_done(a,b)       ((void) 0)
 
+#define trace_xfs_bmap_free_defer(a,b,c,d,e)   ((void) 0)
+#define trace_xfs_bmap_free_deferred(a,b,c,d,e)        ((void) 0)
+
 #endif /* __TRACE_H__ */
index f2d50863bf26b9b779eded38f4721f1f9a5ee34e..1a473b196101c320640c1607bfcf3557323b1c27 100644 (file)
@@ -2699,6 +2699,13 @@ xfs_free_extent(
 
        ASSERT(len != 0);
 
+       trace_xfs_bmap_free_deferred(mp, agno, 0, agbno, len);
+
+       if (XFS_TEST_ERROR(false, mp,
+                       XFS_ERRTAG_FREE_EXTENT,
+                       XFS_RANDOM_FREE_EXTENT))
+               return -EIO;
+
        error = xfs_free_extent_fix_freelist(tp, agno, &agbp);
        if (error)
                return error;
index ebb3f6dc22382cdbc4fd2456dcd9ca59e4454b2a..a4a6ae62b0a400381fafcbf53971ddb53bd0fcdc 100644 (file)
@@ -588,6 +588,8 @@ xfs_bmap_add_free(
        new = kmem_zone_alloc(xfs_bmap_free_item_zone, KM_SLEEP);
        new->xefi_startblock = bno;
        new->xefi_blockcount = (xfs_extlen_t)len;
+       trace_xfs_bmap_free_defer(mp, XFS_FSB_TO_AGNO(mp, bno), 0,
+                       XFS_FSB_TO_AGBNO(mp, bno), len);
        xfs_defer_add(dfops, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list);
 }