* [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test @ 2021-12-06 23:55 Catherine Hoang 2021-12-06 23:55 ` [RFC PATCH v2 1/2] xfs: add leaf split error tag Catherine Hoang 2021-12-06 23:55 ` [RFC PATCH v2 2/2] xfs: add leaf to node " Catherine Hoang 0 siblings, 2 replies; 6+ messages in thread From: Catherine Hoang @ 2021-12-06 23:55 UTC (permalink / raw) To: linux-xfs Hi all, These are the corresponding kernel changes for the new log attribute replay test. These are built on top of Allison’s logged attribute patch sets, which can be viewed here: https://github.com/allisonhenderson/xfs_work/tree/delayed_attrs_v25_extended This set adds the new error tags larp_leaf_split and larp_leaf_to_node, which are used to inject errors in the tests. v2 changes: Updated naming scheme to make it clear that these error tags are meant to trigger on the attribute code path for a replay Suggestions and feedback are appreciated! Catherine Catherine Hoang (2): xfs: add leaf split error tag xfs: add leaf to node error tag fs/xfs/libxfs/xfs_attr_leaf.c | 6 ++++++ fs/xfs/libxfs/xfs_da_btree.c | 5 +++++ fs/xfs/libxfs/xfs_errortag.h | 6 +++++- fs/xfs/xfs_error.c | 6 ++++++ 4 files changed, 22 insertions(+), 1 deletion(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [RFC PATCH v2 1/2] xfs: add leaf split error tag 2021-12-06 23:55 [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test Catherine Hoang @ 2021-12-06 23:55 ` Catherine Hoang 2021-12-06 23:55 ` [RFC PATCH v2 2/2] xfs: add leaf to node " Catherine Hoang 1 sibling, 0 replies; 6+ messages in thread From: Catherine Hoang @ 2021-12-06 23:55 UTC (permalink / raw) To: linux-xfs Add an error tag on xfs_da3_split to test log attribute recovery and replay. Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> --- fs/xfs/libxfs/xfs_da_btree.c | 5 +++++ fs/xfs/libxfs/xfs_errortag.h | 4 +++- fs/xfs/xfs_error.c | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c index dd7a2dbce1d1..258a5fef64b2 100644 --- a/fs/xfs/libxfs/xfs_da_btree.c +++ b/fs/xfs/libxfs/xfs_da_btree.c @@ -22,6 +22,7 @@ #include "xfs_trace.h" #include "xfs_buf_item.h" #include "xfs_log.h" +#include "xfs_errortag.h" /* * xfs_da_btree.c @@ -482,6 +483,10 @@ xfs_da3_split( trace_xfs_da_split(state->args); + if (XFS_TEST_ERROR(false, state->mp, XFS_ERRTAG_LARP_LEAF_SPLIT)) { + return -EIO; + } + /* * Walk back up the tree splitting/inserting/adjusting as necessary. * If we need to insert and there isn't room, split the node, then diff --git a/fs/xfs/libxfs/xfs_errortag.h b/fs/xfs/libxfs/xfs_errortag.h index c15d2340220c..970f3a3f3750 100644 --- a/fs/xfs/libxfs/xfs_errortag.h +++ b/fs/xfs/libxfs/xfs_errortag.h @@ -60,7 +60,8 @@ #define XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT 37 #define XFS_ERRTAG_AG_RESV_FAIL 38 #define XFS_ERRTAG_LARP 39 -#define XFS_ERRTAG_MAX 40 +#define XFS_ERRTAG_LARP_LEAF_SPLIT 40 +#define XFS_ERRTAG_MAX 41 /* * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. @@ -105,5 +106,6 @@ #define XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT 1 #define XFS_RANDOM_AG_RESV_FAIL 1 #define XFS_RANDOM_LARP 1 +#define XFS_RANDOM_LARP_LEAF_SPLIT 1 #endif /* __XFS_ERRORTAG_H_ */ diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index d4b2256ba00b..9cb6743a5ae3 100644 --- a/fs/xfs/xfs_error.c +++ b/fs/xfs/xfs_error.c @@ -58,6 +58,7 @@ static unsigned int xfs_errortag_random_default[] = { XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT, XFS_RANDOM_AG_RESV_FAIL, XFS_RANDOM_LARP, + XFS_RANDOM_LARP_LEAF_SPLIT, }; struct xfs_errortag_attr { @@ -172,6 +173,7 @@ XFS_ERRORTAG_ATTR_RW(reduce_max_iextents, XFS_ERRTAG_REDUCE_MAX_IEXTENTS); XFS_ERRORTAG_ATTR_RW(bmap_alloc_minlen_extent, XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT); XFS_ERRORTAG_ATTR_RW(ag_resv_fail, XFS_ERRTAG_AG_RESV_FAIL); XFS_ERRORTAG_ATTR_RW(larp, XFS_ERRTAG_LARP); +XFS_ERRORTAG_ATTR_RW(larp_leaf_split, XFS_ERRTAG_LARP_LEAF_SPLIT); static struct attribute *xfs_errortag_attrs[] = { XFS_ERRORTAG_ATTR_LIST(noerror), @@ -214,6 +216,7 @@ static struct attribute *xfs_errortag_attrs[] = { XFS_ERRORTAG_ATTR_LIST(bmap_alloc_minlen_extent), XFS_ERRORTAG_ATTR_LIST(ag_resv_fail), XFS_ERRORTAG_ATTR_LIST(larp), + XFS_ERRORTAG_ATTR_LIST(larp_leaf_split), NULL, }; -- 2.25.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [RFC PATCH v2 2/2] xfs: add leaf to node error tag 2021-12-06 23:55 [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test Catherine Hoang 2021-12-06 23:55 ` [RFC PATCH v2 1/2] xfs: add leaf split error tag Catherine Hoang @ 2021-12-06 23:55 ` Catherine Hoang 1 sibling, 0 replies; 6+ messages in thread From: Catherine Hoang @ 2021-12-06 23:55 UTC (permalink / raw) To: linux-xfs Add an error tag on xfs_attr3_leaf_to_node to test log attribute recovery and replay. Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> --- 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..0fe028d95c77 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_LARP_LEAF_TO_NODE)) { + 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 970f3a3f3750..6d90f06442e8 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_LARP_LEAF_SPLIT 40 -#define XFS_ERRTAG_MAX 41 +#define XFS_ERRTAG_LARP_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_LARP_LEAF_SPLIT 1 +#define XFS_RANDOM_LARP_LEAF_TO_NODE 1 #endif /* __XFS_ERRORTAG_H_ */ diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index 9cb6743a5ae3..ae2003a95324 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_LARP_LEAF_SPLIT, + XFS_RANDOM_LARP_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(larp_leaf_split, XFS_ERRTAG_LARP_LEAF_SPLIT); +XFS_ERRORTAG_ATTR_RW(larp_leaf_to_node, XFS_ERRTAG_LARP_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(larp_leaf_split), + XFS_ERRORTAG_ATTR_LIST(larp_leaf_to_node), NULL, }; -- 2.25.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test @ 2022-01-10 21:24 Catherine Hoang 2022-01-10 21:24 ` [RFC PATCH v2 1/2] xfs: add leaf split error tag Catherine Hoang 0 siblings, 1 reply; 6+ messages in thread From: Catherine Hoang @ 2022-01-10 21:24 UTC (permalink / raw) To: linux-xfs Hi all, Just wanted to get this sent out again after the holidays. Original text below: These are the corresponding kernel changes for the new log attribute replay test. These are built on top of Allison’s logged attribute patch sets, which can be viewed here: https://github.com/allisonhenderson/xfs_work/tree/delayed_attrs_v25_extended This set adds the new error tags larp_leaf_split and larp_leaf_to_node, which are used to inject errors in the tests. v2 changes: Updated naming scheme to make it clear that these error tags are meant to trigger on the attribute code path for a replay Suggestions and feedback are appreciated! Catherine Catherine Hoang (2): xfs: add leaf split error tag xfs: add leaf to node error tag fs/xfs/libxfs/xfs_attr_leaf.c | 6 ++++++ fs/xfs/libxfs/xfs_da_btree.c | 5 +++++ fs/xfs/libxfs/xfs_errortag.h | 6 +++++- fs/xfs/xfs_error.c | 6 ++++++ 4 files changed, 22 insertions(+), 1 deletion(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [RFC PATCH v2 1/2] xfs: add leaf split error tag 2022-01-10 21:24 [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test Catherine Hoang @ 2022-01-10 21:24 ` Catherine Hoang 2022-01-19 4:47 ` Darrick J. Wong 0 siblings, 1 reply; 6+ messages in thread From: Catherine Hoang @ 2022-01-10 21:24 UTC (permalink / raw) To: linux-xfs Add an error tag on xfs_da3_split to test log attribute recovery and replay. Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> --- fs/xfs/libxfs/xfs_da_btree.c | 5 +++++ fs/xfs/libxfs/xfs_errortag.h | 4 +++- fs/xfs/xfs_error.c | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c index dd7a2dbce1d1..258a5fef64b2 100644 --- a/fs/xfs/libxfs/xfs_da_btree.c +++ b/fs/xfs/libxfs/xfs_da_btree.c @@ -22,6 +22,7 @@ #include "xfs_trace.h" #include "xfs_buf_item.h" #include "xfs_log.h" +#include "xfs_errortag.h" /* * xfs_da_btree.c @@ -482,6 +483,10 @@ xfs_da3_split( trace_xfs_da_split(state->args); + if (XFS_TEST_ERROR(false, state->mp, XFS_ERRTAG_LARP_LEAF_SPLIT)) { + return -EIO; + } + /* * Walk back up the tree splitting/inserting/adjusting as necessary. * If we need to insert and there isn't room, split the node, then diff --git a/fs/xfs/libxfs/xfs_errortag.h b/fs/xfs/libxfs/xfs_errortag.h index c15d2340220c..970f3a3f3750 100644 --- a/fs/xfs/libxfs/xfs_errortag.h +++ b/fs/xfs/libxfs/xfs_errortag.h @@ -60,7 +60,8 @@ #define XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT 37 #define XFS_ERRTAG_AG_RESV_FAIL 38 #define XFS_ERRTAG_LARP 39 -#define XFS_ERRTAG_MAX 40 +#define XFS_ERRTAG_LARP_LEAF_SPLIT 40 +#define XFS_ERRTAG_MAX 41 /* * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. @@ -105,5 +106,6 @@ #define XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT 1 #define XFS_RANDOM_AG_RESV_FAIL 1 #define XFS_RANDOM_LARP 1 +#define XFS_RANDOM_LARP_LEAF_SPLIT 1 #endif /* __XFS_ERRORTAG_H_ */ diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index d4b2256ba00b..9cb6743a5ae3 100644 --- a/fs/xfs/xfs_error.c +++ b/fs/xfs/xfs_error.c @@ -58,6 +58,7 @@ static unsigned int xfs_errortag_random_default[] = { XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT, XFS_RANDOM_AG_RESV_FAIL, XFS_RANDOM_LARP, + XFS_RANDOM_LARP_LEAF_SPLIT, }; struct xfs_errortag_attr { @@ -172,6 +173,7 @@ XFS_ERRORTAG_ATTR_RW(reduce_max_iextents, XFS_ERRTAG_REDUCE_MAX_IEXTENTS); XFS_ERRORTAG_ATTR_RW(bmap_alloc_minlen_extent, XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT); XFS_ERRORTAG_ATTR_RW(ag_resv_fail, XFS_ERRTAG_AG_RESV_FAIL); XFS_ERRORTAG_ATTR_RW(larp, XFS_ERRTAG_LARP); +XFS_ERRORTAG_ATTR_RW(larp_leaf_split, XFS_ERRTAG_LARP_LEAF_SPLIT); static struct attribute *xfs_errortag_attrs[] = { XFS_ERRORTAG_ATTR_LIST(noerror), @@ -214,6 +216,7 @@ static struct attribute *xfs_errortag_attrs[] = { XFS_ERRORTAG_ATTR_LIST(bmap_alloc_minlen_extent), XFS_ERRORTAG_ATTR_LIST(ag_resv_fail), XFS_ERRORTAG_ATTR_LIST(larp), + XFS_ERRORTAG_ATTR_LIST(larp_leaf_split), NULL, }; -- 2.25.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [RFC PATCH v2 1/2] xfs: add leaf split error tag 2022-01-10 21:24 ` [RFC PATCH v2 1/2] xfs: add leaf split error tag Catherine Hoang @ 2022-01-19 4:47 ` Darrick J. Wong 2022-01-19 21:38 ` Catherine Hoang 0 siblings, 1 reply; 6+ messages in thread From: Darrick J. Wong @ 2022-01-19 4:47 UTC (permalink / raw) To: Catherine Hoang; +Cc: linux-xfs On Mon, Jan 10, 2022 at 09:24:53PM +0000, Catherine Hoang wrote: > Add an error tag on xfs_da3_split to test log attribute recovery > and replay. > > Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com> > Reviewed-by: Allison Henderson <allison.henderson@oracle.com> > --- > fs/xfs/libxfs/xfs_da_btree.c | 5 +++++ > fs/xfs/libxfs/xfs_errortag.h | 4 +++- > fs/xfs/xfs_error.c | 3 +++ > 3 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c > index dd7a2dbce1d1..258a5fef64b2 100644 > --- a/fs/xfs/libxfs/xfs_da_btree.c > +++ b/fs/xfs/libxfs/xfs_da_btree.c > @@ -22,6 +22,7 @@ > #include "xfs_trace.h" > #include "xfs_buf_item.h" > #include "xfs_log.h" > +#include "xfs_errortag.h" > > /* > * xfs_da_btree.c > @@ -482,6 +483,10 @@ xfs_da3_split( > > trace_xfs_da_split(state->args); > > + if (XFS_TEST_ERROR(false, state->mp, XFS_ERRTAG_LARP_LEAF_SPLIT)) { This error injection knob is in the middle of the dabtree code, so it really ought to be namespaced _DA_ and not _LARP_: XFS_ERRTAG_DA_LEAF_SPLIT A bit of background: in XFS, directories and extended file attributes both start their lives as arrays of variable length records that map a name to some sort of binary data. Directory entries map a human- readable bytestring to an inode number, and xattrs map a namespaced human-readable bytestring to a blob of binary data. To speed up lookups by name, both structures support adding a btree index that maps the human-readable name to a hash value, then maps the hash value(s) to positions within the array. Within the xfs codebase, that btree is called the "dabtree" to distinguish it from xfs_btree, which is a totally different animal. Hence, any error injection knobs touching xfs_da* functions really should be namespaced _DA_ to match. (And for everyone else following along at home, "LARP" refers to Logging extended Attributes that are Replayable on Purpose or something like that.) > + return -EIO; > + } Nit: don't need braces for a single-line if body. Other than those two things, this looks good to me. --D > + > /* > * Walk back up the tree splitting/inserting/adjusting as necessary. > * If we need to insert and there isn't room, split the node, then > diff --git a/fs/xfs/libxfs/xfs_errortag.h b/fs/xfs/libxfs/xfs_errortag.h > index c15d2340220c..970f3a3f3750 100644 > --- a/fs/xfs/libxfs/xfs_errortag.h > +++ b/fs/xfs/libxfs/xfs_errortag.h > @@ -60,7 +60,8 @@ > #define XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT 37 > #define XFS_ERRTAG_AG_RESV_FAIL 38 > #define XFS_ERRTAG_LARP 39 > -#define XFS_ERRTAG_MAX 40 > +#define XFS_ERRTAG_LARP_LEAF_SPLIT 40 > +#define XFS_ERRTAG_MAX 41 > > /* > * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. > @@ -105,5 +106,6 @@ > #define XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT 1 > #define XFS_RANDOM_AG_RESV_FAIL 1 > #define XFS_RANDOM_LARP 1 > +#define XFS_RANDOM_LARP_LEAF_SPLIT 1 > > #endif /* __XFS_ERRORTAG_H_ */ > diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c > index d4b2256ba00b..9cb6743a5ae3 100644 > --- a/fs/xfs/xfs_error.c > +++ b/fs/xfs/xfs_error.c > @@ -58,6 +58,7 @@ static unsigned int xfs_errortag_random_default[] = { > XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT, > XFS_RANDOM_AG_RESV_FAIL, > XFS_RANDOM_LARP, > + XFS_RANDOM_LARP_LEAF_SPLIT, > }; > > struct xfs_errortag_attr { > @@ -172,6 +173,7 @@ XFS_ERRORTAG_ATTR_RW(reduce_max_iextents, XFS_ERRTAG_REDUCE_MAX_IEXTENTS); > XFS_ERRORTAG_ATTR_RW(bmap_alloc_minlen_extent, XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT); > XFS_ERRORTAG_ATTR_RW(ag_resv_fail, XFS_ERRTAG_AG_RESV_FAIL); > XFS_ERRORTAG_ATTR_RW(larp, XFS_ERRTAG_LARP); > +XFS_ERRORTAG_ATTR_RW(larp_leaf_split, XFS_ERRTAG_LARP_LEAF_SPLIT); > > static struct attribute *xfs_errortag_attrs[] = { > XFS_ERRORTAG_ATTR_LIST(noerror), > @@ -214,6 +216,7 @@ static struct attribute *xfs_errortag_attrs[] = { > XFS_ERRORTAG_ATTR_LIST(bmap_alloc_minlen_extent), > XFS_ERRORTAG_ATTR_LIST(ag_resv_fail), > XFS_ERRORTAG_ATTR_LIST(larp), > + XFS_ERRORTAG_ATTR_LIST(larp_leaf_split), > NULL, > }; > > -- > 2.25.1 > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC PATCH v2 1/2] xfs: add leaf split error tag 2022-01-19 4:47 ` Darrick J. Wong @ 2022-01-19 21:38 ` Catherine Hoang 0 siblings, 0 replies; 6+ messages in thread From: Catherine Hoang @ 2022-01-19 21:38 UTC (permalink / raw) To: Darrick J. Wong; +Cc: linux-xfs > On Jan 18, 2022, at 8:47 PM, Darrick J. Wong <djwong@kernel.org> wrote: > > On Mon, Jan 10, 2022 at 09:24:53PM +0000, Catherine Hoang wrote: >> Add an error tag on xfs_da3_split to test log attribute recovery >> and replay. >> >> Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com> >> Reviewed-by: Allison Henderson <allison.henderson@oracle.com> >> --- >> fs/xfs/libxfs/xfs_da_btree.c | 5 +++++ >> fs/xfs/libxfs/xfs_errortag.h | 4 +++- >> fs/xfs/xfs_error.c | 3 +++ >> 3 files changed, 11 insertions(+), 1 deletion(-) >> >> diff --git a/fs/xfs/libxfs/xfs_da_btree.c b/fs/xfs/libxfs/xfs_da_btree.c >> index dd7a2dbce1d1..258a5fef64b2 100644 >> --- a/fs/xfs/libxfs/xfs_da_btree.c >> +++ b/fs/xfs/libxfs/xfs_da_btree.c >> @@ -22,6 +22,7 @@ >> #include "xfs_trace.h" >> #include "xfs_buf_item.h" >> #include "xfs_log.h" >> +#include "xfs_errortag.h" >> >> /* >> * xfs_da_btree.c >> @@ -482,6 +483,10 @@ xfs_da3_split( >> >> trace_xfs_da_split(state->args); >> >> + if (XFS_TEST_ERROR(false, state->mp, XFS_ERRTAG_LARP_LEAF_SPLIT)) { > > This error injection knob is in the middle of the dabtree code, so it > really ought to be namespaced _DA_ and not _LARP_: > > XFS_ERRTAG_DA_LEAF_SPLIT Ok, this makes sense. Will fix, thanks for the explanation! > > A bit of background: in XFS, directories and extended file attributes > both start their lives as arrays of variable length records that map a > name to some sort of binary data. Directory entries map a human- > readable bytestring to an inode number, and xattrs map a namespaced > human-readable bytestring to a blob of binary data. > > To speed up lookups by name, both structures support adding a btree > index that maps the human-readable name to a hash value, then maps the > hash value(s) to positions within the array. Within the xfs codebase, > that btree is called the "dabtree" to distinguish it from xfs_btree, > which is a totally different animal. > > Hence, any error injection knobs touching xfs_da* functions really > should be namespaced _DA_ to match. > > (And for everyone else following along at home, "LARP" refers to Logging > extended Attributes that are Replayable on Purpose or something like > that.) > >> + return -EIO; >> + } > > Nit: don't need braces for a single-line if body. > > Other than those two things, this looks good to me. > > --D Sure, I’ll remove the braces here. > >> + >> /* >> * Walk back up the tree splitting/inserting/adjusting as necessary. >> * If we need to insert and there isn't room, split the node, then >> diff --git a/fs/xfs/libxfs/xfs_errortag.h b/fs/xfs/libxfs/xfs_errortag.h >> index c15d2340220c..970f3a3f3750 100644 >> --- a/fs/xfs/libxfs/xfs_errortag.h >> +++ b/fs/xfs/libxfs/xfs_errortag.h >> @@ -60,7 +60,8 @@ >> #define XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT 37 >> #define XFS_ERRTAG_AG_RESV_FAIL 38 >> #define XFS_ERRTAG_LARP 39 >> -#define XFS_ERRTAG_MAX 40 >> +#define XFS_ERRTAG_LARP_LEAF_SPLIT 40 >> +#define XFS_ERRTAG_MAX 41 >> >> /* >> * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. >> @@ -105,5 +106,6 @@ >> #define XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT 1 >> #define XFS_RANDOM_AG_RESV_FAIL 1 >> #define XFS_RANDOM_LARP 1 >> +#define XFS_RANDOM_LARP_LEAF_SPLIT 1 >> >> #endif /* __XFS_ERRORTAG_H_ */ >> diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c >> index d4b2256ba00b..9cb6743a5ae3 100644 >> --- a/fs/xfs/xfs_error.c >> +++ b/fs/xfs/xfs_error.c >> @@ -58,6 +58,7 @@ static unsigned int xfs_errortag_random_default[] = { >> XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT, >> XFS_RANDOM_AG_RESV_FAIL, >> XFS_RANDOM_LARP, >> + XFS_RANDOM_LARP_LEAF_SPLIT, >> }; >> >> struct xfs_errortag_attr { >> @@ -172,6 +173,7 @@ XFS_ERRORTAG_ATTR_RW(reduce_max_iextents, XFS_ERRTAG_REDUCE_MAX_IEXTENTS); >> XFS_ERRORTAG_ATTR_RW(bmap_alloc_minlen_extent, XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT); >> XFS_ERRORTAG_ATTR_RW(ag_resv_fail, XFS_ERRTAG_AG_RESV_FAIL); >> XFS_ERRORTAG_ATTR_RW(larp, XFS_ERRTAG_LARP); >> +XFS_ERRORTAG_ATTR_RW(larp_leaf_split, XFS_ERRTAG_LARP_LEAF_SPLIT); >> >> static struct attribute *xfs_errortag_attrs[] = { >> XFS_ERRORTAG_ATTR_LIST(noerror), >> @@ -214,6 +216,7 @@ static struct attribute *xfs_errortag_attrs[] = { >> XFS_ERRORTAG_ATTR_LIST(bmap_alloc_minlen_extent), >> XFS_ERRORTAG_ATTR_LIST(ag_resv_fail), >> XFS_ERRORTAG_ATTR_LIST(larp), >> + XFS_ERRORTAG_ATTR_LIST(larp_leaf_split), >> NULL, >> }; >> >> -- >> 2.25.1 >> ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-01-19 21:38 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-12-06 23:55 [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test Catherine Hoang 2021-12-06 23:55 ` [RFC PATCH v2 1/2] xfs: add leaf split error tag Catherine Hoang 2021-12-06 23:55 ` [RFC PATCH v2 2/2] xfs: add leaf to node " Catherine Hoang 2022-01-10 21:24 [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test Catherine Hoang 2022-01-10 21:24 ` [RFC PATCH v2 1/2] xfs: add leaf split error tag Catherine Hoang 2022-01-19 4:47 ` Darrick J. Wong 2022-01-19 21:38 ` Catherine Hoang
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.