All of lore.kernel.org
 help / color / mirror / Atom feed
* [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
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ 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] 9+ 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
  2022-01-10 21:24 ` [RFC PATCH v2 2/2] xfs: add leaf to node " Catherine Hoang
  2022-01-18 18:37 ` [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test Allison Henderson
  2 siblings, 1 reply; 9+ 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] 9+ messages in thread

* [RFC PATCH v2 2/2] xfs: add leaf to node 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 ` [RFC PATCH v2 1/2] xfs: add leaf split error tag Catherine Hoang
@ 2022-01-10 21:24 ` Catherine Hoang
  2022-01-19  4:48   ` Darrick J. Wong
  2022-01-18 18:37 ` [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test Allison Henderson
  2 siblings, 1 reply; 9+ messages in thread
From: Catherine Hoang @ 2022-01-10 21:24 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] 9+ messages in thread

* Re: [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test
  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-10 21:24 ` [RFC PATCH v2 2/2] xfs: add leaf to node " Catherine Hoang
@ 2022-01-18 18:37 ` Allison Henderson
  2 siblings, 0 replies; 9+ messages in thread
From: Allison Henderson @ 2022-01-18 18:37 UTC (permalink / raw)
  To: Catherine Hoang, linux-xfs

Hi Catherine,

I know I've already rvb'd these, but these all look great to me.  So, if 
no one else has any complaints I am happy to add these error tags to the 
larp series.  I am getting ready to send out another revision soon. 
Thanks for all your help here :-)

Allison

On 1/10/22 2:24 PM, Catherine Hoang wrote:
> 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(-)
> 

^ permalink raw reply	[flat|nested] 9+ 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; 9+ 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] 9+ messages in thread

* Re: [RFC PATCH v2 2/2] xfs: add leaf to node error tag
  2022-01-10 21:24 ` [RFC PATCH v2 2/2] xfs: add leaf to node " Catherine Hoang
@ 2022-01-19  4:48   ` Darrick J. Wong
  2022-01-19 21:52     ` [External] : " Catherine Hoang
  0 siblings, 1 reply; 9+ messages in thread
From: Darrick J. Wong @ 2022-01-19  4:48 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs

On Mon, Jan 10, 2022 at 09:24:54PM +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@oracle.com>
> Reviewed-by: Allison Henderson <allison.henderson@oracle.com>

This one actually /is/ an error injection knob for specific xattr
activities, so the naming is appropriate.

Reviewed-by: Darrick J. Wong <djwong@kernel.org>

--D

> ---
>  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	[flat|nested] 9+ 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; 9+ 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] 9+ messages in thread

* Re: [External] : Re: [RFC PATCH v2 2/2] xfs: add leaf to node error tag
  2022-01-19  4:48   ` Darrick J. Wong
@ 2022-01-19 21:52     ` Catherine Hoang
  0 siblings, 0 replies; 9+ messages in thread
From: Catherine Hoang @ 2022-01-19 21:52 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs

> On Jan 18, 2022, at 8:48 PM, Darrick J. Wong <djwong@kernel.org> wrote:
> 
> On Mon, Jan 10, 2022 at 09:24:54PM +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@oracle.com>
>> Reviewed-by: Allison Henderson <allison.henderson@oracle.com>
> 
> This one actually /is/ an error injection knob for specific xattr
> activities, so the naming is appropriate.
> 
> Reviewed-by: Darrick J. Wong <djwong@kernel.org>
> 
> --D

Thanks for the review!
> 
>> ---
>> 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	[flat|nested] 9+ messages in thread

* [RFC PATCH v2 2/2] xfs: add leaf to node error tag
  2021-12-06 23:55 Catherine Hoang
@ 2021-12-06 23:55 ` Catherine Hoang
  0 siblings, 0 replies; 9+ 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] 9+ messages in thread

end of thread, other threads:[~2022-01-19 21:52 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
2022-01-10 21:24 ` [RFC PATCH v2 2/2] xfs: add leaf to node " Catherine Hoang
2022-01-19  4:48   ` Darrick J. Wong
2022-01-19 21:52     ` [External] : " Catherine Hoang
2022-01-18 18:37 ` [RFC PATCH v2 0/2] xfs: add error tags for log attribute replay test Allison Henderson
  -- strict thread matches above, loose matches on Subject: below --
2021-12-06 23:55 Catherine Hoang
2021-12-06 23:55 ` [RFC PATCH v2 2/2] xfs: add leaf to node error tag 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.