From: "Darrick J. Wong" <djwong@kernel.org>
To: Christoph Hellwig <hch@lst.de>
Cc: Carlos Maiolino <cem@kernel.org>, linux-xfs@vger.kernel.org
Subject: Re: [PATCH 5/6] xfs: centralize error tag definitions
Date: Tue, 16 Sep 2025 09:38:31 -0700 [thread overview]
Message-ID: <20250916163831.GG8096@frogsfrogsfrogs> (raw)
In-Reply-To: <20250916162843.258959-6-hch@lst.de>
On Tue, Sep 16, 2025 at 09:28:18AM -0700, Christoph Hellwig wrote:
> Right now 5 places in the kernel and one in xfsprogs need to be updated
> for each new error tag. Add a bit of macro magic so that only the
> error tag definition and a single table, which reside next to each
> other, need to be updated.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/libxfs/xfs_errortag.h | 106 ++++++++++++----------
> fs/xfs/xfs_error.c | 166 +++++------------------------------
> 2 files changed, 81 insertions(+), 191 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_errortag.h b/fs/xfs/libxfs/xfs_errortag.h
> index a53c5d40e084..e45ac1314078 100644
> --- a/fs/xfs/libxfs/xfs_errortag.h
> +++ b/fs/xfs/libxfs/xfs_errortag.h
> @@ -4,9 +4,19 @@
> * Copyright (C) 2017 Oracle.
> * All Rights Reserved.
> */
> -#ifndef __XFS_ERRORTAG_H_
> +#if !defined(__XFS_ERRORTAG_H_) || defined(XFS_ERRTAG)
> #define __XFS_ERRORTAG_H_
>
> +/*
> + * There are two ways to use this header file. The first way is to #include it
> + * bare, which will define all the XFS_ERRTAG_* error injection knobs for use
> + * with the XFS_TEST_ERROR macro. The second way is to enclose the #include
> + * with a #define for an XFS_ERRTAG macro, in which case the header will define
> + * an XFS_ERRTAGS macro that expands to the XFS_ERRTAG macro supplied by the
> + * source files that includes this header use for each defined error
> + * injection knob.
Hmm, that last sentence could be more concise, and describe what is
passed to the XFS_ERRTAG macro:
"...will define an XFS_ERRTAGS macro that expands to invoke that
XFS_ERRTAG macro for each defined error injection knob. The parameters
to the XFS_ERRTAG macro are:
1. The XFS_ERRTAG_ flag but without the prefix;
2. The name of the sysfs knob; and
3. The default value for the knob."
I wonder if XFS_ERRTAG() should be supplied with the full XFS_ERRTAG_FOO
name, not just FOO?
Otherwise this looks good now.
--D
> + */
> +
> /*
> * error injection tags - the labels can be anything you want
> * but each tag should have its own unique number
> @@ -71,49 +81,55 @@
> * Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
> */
> #define XFS_RANDOM_DEFAULT 100
> -#define XFS_RANDOM_IFLUSH_1 XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IFLUSH_2 XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IFLUSH_3 XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IFLUSH_4 XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IFLUSH_5 XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IFLUSH_6 XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_DA_READ_BUF XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_BTREE_CHECK_LBLOCK (XFS_RANDOM_DEFAULT/4)
> -#define XFS_RANDOM_BTREE_CHECK_SBLOCK XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_ALLOC_READ_AGF XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IALLOC_READ_AGI XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_ITOBP_INOTOBP XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IUNLINK XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IUNLINK_REMOVE XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_DIR_INO_VALIDATE XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_BULKSTAT_READ_CHUNK XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_IODONE_IOERR (XFS_RANDOM_DEFAULT/10)
> -#define XFS_RANDOM_STRATREAD_IOERR (XFS_RANDOM_DEFAULT/10)
> -#define XFS_RANDOM_STRATCMPL_IOERR (XFS_RANDOM_DEFAULT/10)
> -#define XFS_RANDOM_DIOWRITE_IOERR (XFS_RANDOM_DEFAULT/10)
> -#define XFS_RANDOM_BMAPIFORMAT XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_FREE_EXTENT 1
> -#define XFS_RANDOM_RMAP_FINISH_ONE 1
> -#define XFS_RANDOM_REFCOUNT_CONTINUE_UPDATE 1
> -#define XFS_RANDOM_REFCOUNT_FINISH_ONE 1
> -#define XFS_RANDOM_BMAP_FINISH_ONE 1
> -#define XFS_RANDOM_AG_RESV_CRITICAL 4
> -#define XFS_RANDOM_LOG_BAD_CRC 1
> -#define XFS_RANDOM_LOG_ITEM_PIN 1
> -#define XFS_RANDOM_BUF_LRU_REF 2
> -#define XFS_RANDOM_FORCE_SCRUB_REPAIR 1
> -#define XFS_RANDOM_FORCE_SUMMARY_RECALC 1
> -#define XFS_RANDOM_IUNLINK_FALLBACK (XFS_RANDOM_DEFAULT/10)
> -#define XFS_RANDOM_BUF_IOERROR XFS_RANDOM_DEFAULT
> -#define XFS_RANDOM_REDUCE_MAX_IEXTENTS 1
> -#define XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT 1
> -#define XFS_RANDOM_AG_RESV_FAIL 1
> -#define XFS_RANDOM_LARP 1
> -#define XFS_RANDOM_DA_LEAF_SPLIT 1
> -#define XFS_RANDOM_ATTR_LEAF_TO_NODE 1
> -#define XFS_RANDOM_WB_DELAY_MS 3000
> -#define XFS_RANDOM_WRITE_DELAY_MS 3000
> -#define XFS_RANDOM_EXCHMAPS_FINISH_ONE 1
> -#define XFS_RANDOM_METAFILE_RESV_CRITICAL 4
> +
> +#ifdef XFS_ERRTAG
> +# undef XFS_ERRTAGS
> +# define XFS_ERRTAGS \
> +XFS_ERRTAG(NOERROR, noerror, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IFLUSH_1, iflush1, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IFLUSH_2, iflush2, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IFLUSH_3, iflush3, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IFLUSH_4, iflush4, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IFLUSH_5, iflush5, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IFLUSH_6, iflush6, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(DA_READ_BUF, dareadbuf, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(BTREE_CHECK_LBLOCK, btree_chk_lblk, XFS_RANDOM_DEFAULT/4) \
> +XFS_ERRTAG(BTREE_CHECK_SBLOCK, btree_chk_sblk, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(ALLOC_READ_AGF, readagf, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IALLOC_READ_AGI, readagi, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(ITOBP_INOTOBP, itobp, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IUNLINK, iunlink, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IUNLINK_REMOVE, iunlinkrm, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(DIR_INO_VALIDATE, dirinovalid, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(BULKSTAT_READ_CHUNK, bulkstat, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(IODONE_IOERR, logiodone, XFS_RANDOM_DEFAULT/10) \
> +XFS_ERRTAG(STRATREAD_IOERR, stratread, XFS_RANDOM_DEFAULT/10) \
> +XFS_ERRTAG(STRATCMPL_IOERR, stratcmpl, XFS_RANDOM_DEFAULT/10) \
> +XFS_ERRTAG(DIOWRITE_IOERR, diowrite, XFS_RANDOM_DEFAULT/10) \
> +XFS_ERRTAG(BMAPIFORMAT, bmapifmt, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(FREE_EXTENT, free_extent, 1) \
> +XFS_ERRTAG(RMAP_FINISH_ONE, rmap_finish_one, 1) \
> +XFS_ERRTAG(REFCOUNT_CONTINUE_UPDATE, refcount_continue_update, 1) \
> +XFS_ERRTAG(REFCOUNT_FINISH_ONE, refcount_finish_one, 1) \
> +XFS_ERRTAG(BMAP_FINISH_ONE, bmap_finish_one, 1) \
> +XFS_ERRTAG(AG_RESV_CRITICAL, ag_resv_critical, 4) \
> +XFS_ERRTAG(LOG_BAD_CRC, log_bad_crc, 1) \
> +XFS_ERRTAG(LOG_ITEM_PIN, log_item_pin, 1) \
> +XFS_ERRTAG(BUF_LRU_REF, buf_lru_ref, 2) \
> +XFS_ERRTAG(FORCE_SCRUB_REPAIR, force_repair, 1) \
> +XFS_ERRTAG(FORCE_SUMMARY_RECALC, bad_summary, 1) \
> +XFS_ERRTAG(IUNLINK_FALLBACK, iunlink_fallback, XFS_RANDOM_DEFAULT/10) \
> +XFS_ERRTAG(BUF_IOERROR, buf_ioerror, XFS_RANDOM_DEFAULT) \
> +XFS_ERRTAG(REDUCE_MAX_IEXTENTS, reduce_max_iextents, 1) \
> +XFS_ERRTAG(BMAP_ALLOC_MINLEN_EXTENT, bmap_alloc_minlen_extent, 1) \
> +XFS_ERRTAG(AG_RESV_FAIL, ag_resv_fail, 1) \
> +XFS_ERRTAG(LARP, larp, 1) \
> +XFS_ERRTAG(DA_LEAF_SPLIT, da_leaf_split, 1) \
> +XFS_ERRTAG(ATTR_LEAF_TO_NODE, attr_leaf_to_node, 1) \
> +XFS_ERRTAG(WB_DELAY_MS, wb_delay_ms, 3000) \
> +XFS_ERRTAG(WRITE_DELAY_MS, write_delay_ms, 3000) \
> +XFS_ERRTAG(EXCHMAPS_FINISH_ONE, exchmaps_finish_one, 1) \
> +XFS_ERRTAG(METAFILE_RESV_CRITICAL, metafile_resv_crit, 4)
> +#endif /* XFS_ERRTAG */
>
> #endif /* __XFS_ERRORTAG_H_ */
> diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c
> index 44dd8aba0097..ac895cd2bc0a 100644
> --- a/fs/xfs/xfs_error.c
> +++ b/fs/xfs/xfs_error.c
> @@ -10,61 +10,17 @@
> #include "xfs_log_format.h"
> #include "xfs_trans_resv.h"
> #include "xfs_mount.h"
> -#include "xfs_errortag.h"
> #include "xfs_error.h"
> #include "xfs_sysfs.h"
> #include "xfs_inode.h"
>
> #ifdef DEBUG
>
> -static unsigned int xfs_errortag_random_default[] = {
> - XFS_RANDOM_DEFAULT,
> - XFS_RANDOM_IFLUSH_1,
> - XFS_RANDOM_IFLUSH_2,
> - XFS_RANDOM_IFLUSH_3,
> - XFS_RANDOM_IFLUSH_4,
> - XFS_RANDOM_IFLUSH_5,
> - XFS_RANDOM_IFLUSH_6,
> - XFS_RANDOM_DA_READ_BUF,
> - XFS_RANDOM_BTREE_CHECK_LBLOCK,
> - XFS_RANDOM_BTREE_CHECK_SBLOCK,
> - XFS_RANDOM_ALLOC_READ_AGF,
> - XFS_RANDOM_IALLOC_READ_AGI,
> - XFS_RANDOM_ITOBP_INOTOBP,
> - XFS_RANDOM_IUNLINK,
> - XFS_RANDOM_IUNLINK_REMOVE,
> - XFS_RANDOM_DIR_INO_VALIDATE,
> - XFS_RANDOM_BULKSTAT_READ_CHUNK,
> - XFS_RANDOM_IODONE_IOERR,
> - XFS_RANDOM_STRATREAD_IOERR,
> - XFS_RANDOM_STRATCMPL_IOERR,
> - XFS_RANDOM_DIOWRITE_IOERR,
> - XFS_RANDOM_BMAPIFORMAT,
> - XFS_RANDOM_FREE_EXTENT,
> - XFS_RANDOM_RMAP_FINISH_ONE,
> - XFS_RANDOM_REFCOUNT_CONTINUE_UPDATE,
> - XFS_RANDOM_REFCOUNT_FINISH_ONE,
> - XFS_RANDOM_BMAP_FINISH_ONE,
> - XFS_RANDOM_AG_RESV_CRITICAL,
> - 0, /* XFS_RANDOM_DROP_WRITES has been removed */
> - XFS_RANDOM_LOG_BAD_CRC,
> - XFS_RANDOM_LOG_ITEM_PIN,
> - XFS_RANDOM_BUF_LRU_REF,
> - XFS_RANDOM_FORCE_SCRUB_REPAIR,
> - XFS_RANDOM_FORCE_SUMMARY_RECALC,
> - XFS_RANDOM_IUNLINK_FALLBACK,
> - XFS_RANDOM_BUF_IOERROR,
> - XFS_RANDOM_REDUCE_MAX_IEXTENTS,
> - XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT,
> - XFS_RANDOM_AG_RESV_FAIL,
> - XFS_RANDOM_LARP,
> - XFS_RANDOM_DA_LEAF_SPLIT,
> - XFS_RANDOM_ATTR_LEAF_TO_NODE,
> - XFS_RANDOM_WB_DELAY_MS,
> - XFS_RANDOM_WRITE_DELAY_MS,
> - XFS_RANDOM_EXCHMAPS_FINISH_ONE,
> - XFS_RANDOM_METAFILE_RESV_CRITICAL,
> -};
> +#define XFS_ERRTAG(_tag, _name, _default) \
> + [XFS_ERRTAG_##_tag] = (_default),
> +#include "xfs_errortag.h"
> +static unsigned int xfs_errortag_random_default[] = { XFS_ERRTAGS };
> +#undef XFS_ERRTAG
>
> struct xfs_errortag_attr {
> struct attribute attr;
> @@ -125,110 +81,28 @@ static const struct sysfs_ops xfs_errortag_sysfs_ops = {
> .store = xfs_errortag_attr_store,
> };
>
> -#define XFS_ERRORTAG_ATTR_RW(_name, _tag) \
> +#define XFS_ERRTAG(_tag, _name, _default) \
> static struct xfs_errortag_attr xfs_errortag_attr_##_name = { \
> .attr = {.name = __stringify(_name), \
> .mode = VERIFY_OCTAL_PERMISSIONS(S_IWUSR | S_IRUGO) }, \
> - .tag = (_tag), \
> -}
> -
> -#define XFS_ERRORTAG_ATTR_LIST(_name) &xfs_errortag_attr_##_name.attr
> -
> -XFS_ERRORTAG_ATTR_RW(noerror, XFS_ERRTAG_NOERROR);
> -XFS_ERRORTAG_ATTR_RW(iflush1, XFS_ERRTAG_IFLUSH_1);
> -XFS_ERRORTAG_ATTR_RW(iflush2, XFS_ERRTAG_IFLUSH_2);
> -XFS_ERRORTAG_ATTR_RW(iflush3, XFS_ERRTAG_IFLUSH_3);
> -XFS_ERRORTAG_ATTR_RW(iflush4, XFS_ERRTAG_IFLUSH_4);
> -XFS_ERRORTAG_ATTR_RW(iflush5, XFS_ERRTAG_IFLUSH_5);
> -XFS_ERRORTAG_ATTR_RW(iflush6, XFS_ERRTAG_IFLUSH_6);
> -XFS_ERRORTAG_ATTR_RW(dareadbuf, XFS_ERRTAG_DA_READ_BUF);
> -XFS_ERRORTAG_ATTR_RW(btree_chk_lblk, XFS_ERRTAG_BTREE_CHECK_LBLOCK);
> -XFS_ERRORTAG_ATTR_RW(btree_chk_sblk, XFS_ERRTAG_BTREE_CHECK_SBLOCK);
> -XFS_ERRORTAG_ATTR_RW(readagf, XFS_ERRTAG_ALLOC_READ_AGF);
> -XFS_ERRORTAG_ATTR_RW(readagi, XFS_ERRTAG_IALLOC_READ_AGI);
> -XFS_ERRORTAG_ATTR_RW(itobp, XFS_ERRTAG_ITOBP_INOTOBP);
> -XFS_ERRORTAG_ATTR_RW(iunlink, XFS_ERRTAG_IUNLINK);
> -XFS_ERRORTAG_ATTR_RW(iunlinkrm, XFS_ERRTAG_IUNLINK_REMOVE);
> -XFS_ERRORTAG_ATTR_RW(dirinovalid, XFS_ERRTAG_DIR_INO_VALIDATE);
> -XFS_ERRORTAG_ATTR_RW(bulkstat, XFS_ERRTAG_BULKSTAT_READ_CHUNK);
> -XFS_ERRORTAG_ATTR_RW(logiodone, XFS_ERRTAG_IODONE_IOERR);
> -XFS_ERRORTAG_ATTR_RW(stratread, XFS_ERRTAG_STRATREAD_IOERR);
> -XFS_ERRORTAG_ATTR_RW(stratcmpl, XFS_ERRTAG_STRATCMPL_IOERR);
> -XFS_ERRORTAG_ATTR_RW(diowrite, XFS_ERRTAG_DIOWRITE_IOERR);
> -XFS_ERRORTAG_ATTR_RW(bmapifmt, XFS_ERRTAG_BMAPIFORMAT);
> -XFS_ERRORTAG_ATTR_RW(free_extent, XFS_ERRTAG_FREE_EXTENT);
> -XFS_ERRORTAG_ATTR_RW(rmap_finish_one, XFS_ERRTAG_RMAP_FINISH_ONE);
> -XFS_ERRORTAG_ATTR_RW(refcount_continue_update, XFS_ERRTAG_REFCOUNT_CONTINUE_UPDATE);
> -XFS_ERRORTAG_ATTR_RW(refcount_finish_one, XFS_ERRTAG_REFCOUNT_FINISH_ONE);
> -XFS_ERRORTAG_ATTR_RW(bmap_finish_one, XFS_ERRTAG_BMAP_FINISH_ONE);
> -XFS_ERRORTAG_ATTR_RW(ag_resv_critical, XFS_ERRTAG_AG_RESV_CRITICAL);
> -XFS_ERRORTAG_ATTR_RW(log_bad_crc, XFS_ERRTAG_LOG_BAD_CRC);
> -XFS_ERRORTAG_ATTR_RW(log_item_pin, XFS_ERRTAG_LOG_ITEM_PIN);
> -XFS_ERRORTAG_ATTR_RW(buf_lru_ref, XFS_ERRTAG_BUF_LRU_REF);
> -XFS_ERRORTAG_ATTR_RW(force_repair, XFS_ERRTAG_FORCE_SCRUB_REPAIR);
> -XFS_ERRORTAG_ATTR_RW(bad_summary, XFS_ERRTAG_FORCE_SUMMARY_RECALC);
> -XFS_ERRORTAG_ATTR_RW(iunlink_fallback, XFS_ERRTAG_IUNLINK_FALLBACK);
> -XFS_ERRORTAG_ATTR_RW(buf_ioerror, XFS_ERRTAG_BUF_IOERROR);
> -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(da_leaf_split, XFS_ERRTAG_DA_LEAF_SPLIT);
> -XFS_ERRORTAG_ATTR_RW(attr_leaf_to_node, XFS_ERRTAG_ATTR_LEAF_TO_NODE);
> -XFS_ERRORTAG_ATTR_RW(wb_delay_ms, XFS_ERRTAG_WB_DELAY_MS);
> -XFS_ERRORTAG_ATTR_RW(write_delay_ms, XFS_ERRTAG_WRITE_DELAY_MS);
> -XFS_ERRORTAG_ATTR_RW(exchmaps_finish_one, XFS_ERRTAG_EXCHMAPS_FINISH_ONE);
> -XFS_ERRORTAG_ATTR_RW(metafile_resv_crit, XFS_ERRTAG_METAFILE_RESV_CRITICAL);
> + .tag = XFS_ERRTAG_##_tag, \
> +};
> +#include "xfs_errortag.h"
> +XFS_ERRTAGS
> +#undef XFS_ERRTAG
>
> +#define XFS_ERRTAG(_tag, _name, _default) \
> + &xfs_errortag_attr_##_name.attr,
> +#include "xfs_errortag.h"
> static struct attribute *xfs_errortag_attrs[] = {
> - XFS_ERRORTAG_ATTR_LIST(noerror),
> - XFS_ERRORTAG_ATTR_LIST(iflush1),
> - XFS_ERRORTAG_ATTR_LIST(iflush2),
> - XFS_ERRORTAG_ATTR_LIST(iflush3),
> - XFS_ERRORTAG_ATTR_LIST(iflush4),
> - XFS_ERRORTAG_ATTR_LIST(iflush5),
> - XFS_ERRORTAG_ATTR_LIST(iflush6),
> - XFS_ERRORTAG_ATTR_LIST(dareadbuf),
> - XFS_ERRORTAG_ATTR_LIST(btree_chk_lblk),
> - XFS_ERRORTAG_ATTR_LIST(btree_chk_sblk),
> - XFS_ERRORTAG_ATTR_LIST(readagf),
> - XFS_ERRORTAG_ATTR_LIST(readagi),
> - XFS_ERRORTAG_ATTR_LIST(itobp),
> - XFS_ERRORTAG_ATTR_LIST(iunlink),
> - XFS_ERRORTAG_ATTR_LIST(iunlinkrm),
> - XFS_ERRORTAG_ATTR_LIST(dirinovalid),
> - XFS_ERRORTAG_ATTR_LIST(bulkstat),
> - XFS_ERRORTAG_ATTR_LIST(logiodone),
> - XFS_ERRORTAG_ATTR_LIST(stratread),
> - XFS_ERRORTAG_ATTR_LIST(stratcmpl),
> - XFS_ERRORTAG_ATTR_LIST(diowrite),
> - XFS_ERRORTAG_ATTR_LIST(bmapifmt),
> - XFS_ERRORTAG_ATTR_LIST(free_extent),
> - XFS_ERRORTAG_ATTR_LIST(rmap_finish_one),
> - XFS_ERRORTAG_ATTR_LIST(refcount_continue_update),
> - XFS_ERRORTAG_ATTR_LIST(refcount_finish_one),
> - XFS_ERRORTAG_ATTR_LIST(bmap_finish_one),
> - XFS_ERRORTAG_ATTR_LIST(ag_resv_critical),
> - XFS_ERRORTAG_ATTR_LIST(log_bad_crc),
> - XFS_ERRORTAG_ATTR_LIST(log_item_pin),
> - XFS_ERRORTAG_ATTR_LIST(buf_lru_ref),
> - XFS_ERRORTAG_ATTR_LIST(force_repair),
> - XFS_ERRORTAG_ATTR_LIST(bad_summary),
> - XFS_ERRORTAG_ATTR_LIST(iunlink_fallback),
> - XFS_ERRORTAG_ATTR_LIST(buf_ioerror),
> - XFS_ERRORTAG_ATTR_LIST(reduce_max_iextents),
> - XFS_ERRORTAG_ATTR_LIST(bmap_alloc_minlen_extent),
> - XFS_ERRORTAG_ATTR_LIST(ag_resv_fail),
> - XFS_ERRORTAG_ATTR_LIST(larp),
> - XFS_ERRORTAG_ATTR_LIST(da_leaf_split),
> - XFS_ERRORTAG_ATTR_LIST(attr_leaf_to_node),
> - XFS_ERRORTAG_ATTR_LIST(wb_delay_ms),
> - XFS_ERRORTAG_ATTR_LIST(write_delay_ms),
> - XFS_ERRORTAG_ATTR_LIST(exchmaps_finish_one),
> - XFS_ERRORTAG_ATTR_LIST(metafile_resv_crit),
> - NULL,
> + XFS_ERRTAGS
> + NULL
> };
> ATTRIBUTE_GROUPS(xfs_errortag);
> +#undef XFS_ERRTAG
> +
> +/* -1 because XFS_ERRTAG_DROP_WRITES got removed, + 1 for NULL termination */
> +static_assert(ARRAY_SIZE(xfs_errortag_attrs) == XFS_ERRTAG_MAX);
>
> static const struct kobj_type xfs_errortag_ktype = {
> .release = xfs_sysfs_release,
> --
> 2.47.2
>
>
next prev parent reply other threads:[~2025-09-16 16:38 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-16 16:28 cleanup error tags v2 Christoph Hellwig
2025-09-16 16:28 ` [PATCH 1/6] xfs: remove xfs_errortag_get Christoph Hellwig
2025-09-16 16:28 ` [PATCH 2/6] xfs: remove xfs_errortag_set Christoph Hellwig
2025-09-16 16:28 ` [PATCH 3/6] xfs: remove the expr argument to XFS_TEST_ERROR Christoph Hellwig
2025-09-16 16:28 ` [PATCH 4/6] xfs: remove pointless externs in xfs_error.h Christoph Hellwig
2025-09-16 16:28 ` [PATCH 5/6] xfs: centralize error tag definitions Christoph Hellwig
2025-09-16 16:38 ` Darrick J. Wong [this message]
2025-09-16 16:40 ` Christoph Hellwig
2025-09-16 16:46 ` Darrick J. Wong
2025-09-16 16:28 ` [PATCH 6/6] xfs: constify xfs_errortag_random_default Christoph Hellwig
-- strict thread matches above, loose matches on Subject: below --
2025-09-15 13:30 cleanup error tags Christoph Hellwig
2025-09-15 13:30 ` [PATCH 5/6] xfs: centralize error tag definitions Christoph Hellwig
2025-09-15 19:10 ` Darrick J. Wong
2025-09-15 20:53 ` Christoph Hellwig
2025-09-15 23:37 ` Darrick J. Wong
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=20250916163831.GG8096@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=cem@kernel.org \
--cc=hch@lst.de \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox