On Thu, Nov 11, 2021 at 12:17:16AM +0000, Catherine Hoang wrote: > Add an error tag on xfs_attr3_leaf_to_node to test log attribute > recovery and replay. > > Signed-off-by: Catherine Hoang <catherine.hoang@xxxxxxxxxx> > --- > fs/xfs/libxfs/xfs_attr_leaf.c | 6 ++++++ > fs/xfs/libxfs/xfs_errortag.h | 4 +++- > fs/xfs/xfs_error.c | 3 +++ > 3 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c > index 74b76b09509f..fdeb09de74ca 100644 > --- a/fs/xfs/libxfs/xfs_attr_leaf.c > +++ b/fs/xfs/libxfs/xfs_attr_leaf.c > @@ -28,6 +28,7 @@ > #include "xfs_dir2.h" > #include "xfs_log.h" > #include "xfs_ag.h" > +#include "xfs_errortag.h" > > > /* > @@ -1189,6 +1190,11 @@ xfs_attr3_leaf_to_node( > > trace_xfs_attr_leaf_to_node(args); > > + if (XFS_TEST_ERROR(false, mp, XFS_ERRTAG_LEAF_TO_NODE)) { Hmmm... any plans to do a similar thing for directories too? (FWIW the rest of the errortag injecting stuff looks ok...) --D > + error = -EIO; > + goto out; > + } > + > error = xfs_da_grow_inode(args, &blkno); > if (error) > goto out; > diff --git a/fs/xfs/libxfs/xfs_errortag.h b/fs/xfs/libxfs/xfs_errortag.h > index 31aeeb94dd5b..cc1650b58723 100644 > --- a/fs/xfs/libxfs/xfs_errortag.h > +++ b/fs/xfs/libxfs/xfs_errortag.h > @@ -61,7 +61,8 @@ > #define XFS_ERRTAG_AG_RESV_FAIL 38 > #define XFS_ERRTAG_LARP 39 > #define XFS_ERRTAG_LEAF_SPLIT 40 > -#define XFS_ERRTAG_MAX 41 > +#define XFS_ERRTAG_LEAF_TO_NODE 41 > +#define XFS_ERRTAG_MAX 42 > > /* > * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. > @@ -107,5 +108,6 @@ > #define XFS_RANDOM_AG_RESV_FAIL 1 > #define XFS_RANDOM_LARP 1 > #define XFS_RANDOM_LEAF_SPLIT 1 > +#define XFS_RANDOM_LEAF_TO_NODE 1 > > #endif /* __XFS_ERRORTAG_H_ */ > diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c > index 732cb66236c1..7f2a71218a82 100644 > --- a/fs/xfs/xfs_error.c > +++ b/fs/xfs/xfs_error.c > @@ -59,6 +59,7 @@ static unsigned int xfs_errortag_random_default[] = { > XFS_RANDOM_AG_RESV_FAIL, > XFS_RANDOM_LARP, > XFS_RANDOM_LEAF_SPLIT, > + XFS_RANDOM_LEAF_TO_NODE, > }; > > struct xfs_errortag_attr { > @@ -174,6 +175,7 @@ XFS_ERRORTAG_ATTR_RW(bmap_alloc_minlen_extent, XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTE > XFS_ERRORTAG_ATTR_RW(ag_resv_fail, XFS_ERRTAG_AG_RESV_FAIL); > XFS_ERRORTAG_ATTR_RW(larp, XFS_ERRTAG_LARP); > XFS_ERRORTAG_ATTR_RW(leaf_split, XFS_ERRTAG_LEAF_SPLIT); > +XFS_ERRORTAG_ATTR_RW(leaf_to_node, XFS_ERRTAG_LEAF_TO_NODE); > > static struct attribute *xfs_errortag_attrs[] = { > XFS_ERRORTAG_ATTR_LIST(noerror), > @@ -217,6 +219,7 @@ static struct attribute *xfs_errortag_attrs[] = { > XFS_ERRORTAG_ATTR_LIST(ag_resv_fail), > XFS_ERRORTAG_ATTR_LIST(larp), > XFS_ERRORTAG_ATTR_LIST(leaf_split), > + XFS_ERRORTAG_ATTR_LIST(leaf_to_node), > NULL, > }; > > -- > 2.25.1 >