All of lore.kernel.org
 help / color / mirror / Atom feed
From: Catherine Hoang <catherine.hoang@oracle.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: "linux-xfs@vger.kernel.org" <linux-xfs@vger.kernel.org>
Subject: Re: [RFC PATCH v2 1/2] xfs: add leaf split error tag
Date: Wed, 19 Jan 2022 21:38:12 +0000	[thread overview]
Message-ID: <BCDAD185-8E16-4750-A876-D53AC4456B6D@oracle.com> (raw)
In-Reply-To: <20220119044759.GF13540@magnolia>

> 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
>> 


  reply	other threads:[~2022-01-19 21:38 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 message]
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 1/2] xfs: add leaf split error tag Catherine Hoang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BCDAD185-8E16-4750-A876-D53AC4456B6D@oracle.com \
    --to=catherine.hoang@oracle.com \
    --cc=djwong@kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.