Skip to content

Commit 71fa062

Browse files
Christoph Hellwigcmaiolino
authored andcommitted
xfs: centralize error tag definitions
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> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Carlos Maiolino <cem@kernel.org>
1 parent b55dd72 commit 71fa062

2 files changed

Lines changed: 87 additions & 193 deletions

File tree

fs/xfs/libxfs/xfs_errortag.h

Lines changed: 67 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,22 @@
44
* Copyright (C) 2017 Oracle.
55
* All Rights Reserved.
66
*/
7-
#ifndef __XFS_ERRORTAG_H_
7+
#if !defined(__XFS_ERRORTAG_H_) || defined(XFS_ERRTAG)
88
#define __XFS_ERRORTAG_H_
99

1010
/*
11-
* error injection tags - the labels can be anything you want
12-
* but each tag should have its own unique number
11+
* There are two ways to use this header file. The first way is to #include it
12+
* bare, which will define all the XFS_ERRTAG_* error injection knobs for use
13+
* with the XFS_TEST_ERROR macro. The second way is to enclose the #include
14+
* with a #define for an XFS_ERRTAG macro, in which case the header will define
15+
" an XFS_ERRTAGS macro that expands to invoke that XFS_ERRTAG macro for each
16+
* defined error injection knob.
1317
*/
1418

19+
/*
20+
* These are the actual error injection tags. The numbers should be consecutive
21+
* because arrays are sized based on the maximum.
22+
*/
1523
#define XFS_ERRTAG_NOERROR 0
1624
#define XFS_ERRTAG_IFLUSH_1 1
1725
#define XFS_ERRTAG_IFLUSH_2 2
@@ -71,49 +79,61 @@
7179
* Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
7280
*/
7381
#define XFS_RANDOM_DEFAULT 100
74-
#define XFS_RANDOM_IFLUSH_1 XFS_RANDOM_DEFAULT
75-
#define XFS_RANDOM_IFLUSH_2 XFS_RANDOM_DEFAULT
76-
#define XFS_RANDOM_IFLUSH_3 XFS_RANDOM_DEFAULT
77-
#define XFS_RANDOM_IFLUSH_4 XFS_RANDOM_DEFAULT
78-
#define XFS_RANDOM_IFLUSH_5 XFS_RANDOM_DEFAULT
79-
#define XFS_RANDOM_IFLUSH_6 XFS_RANDOM_DEFAULT
80-
#define XFS_RANDOM_DA_READ_BUF XFS_RANDOM_DEFAULT
81-
#define XFS_RANDOM_BTREE_CHECK_LBLOCK (XFS_RANDOM_DEFAULT/4)
82-
#define XFS_RANDOM_BTREE_CHECK_SBLOCK XFS_RANDOM_DEFAULT
83-
#define XFS_RANDOM_ALLOC_READ_AGF XFS_RANDOM_DEFAULT
84-
#define XFS_RANDOM_IALLOC_READ_AGI XFS_RANDOM_DEFAULT
85-
#define XFS_RANDOM_ITOBP_INOTOBP XFS_RANDOM_DEFAULT
86-
#define XFS_RANDOM_IUNLINK XFS_RANDOM_DEFAULT
87-
#define XFS_RANDOM_IUNLINK_REMOVE XFS_RANDOM_DEFAULT
88-
#define XFS_RANDOM_DIR_INO_VALIDATE XFS_RANDOM_DEFAULT
89-
#define XFS_RANDOM_BULKSTAT_READ_CHUNK XFS_RANDOM_DEFAULT
90-
#define XFS_RANDOM_IODONE_IOERR (XFS_RANDOM_DEFAULT/10)
91-
#define XFS_RANDOM_STRATREAD_IOERR (XFS_RANDOM_DEFAULT/10)
92-
#define XFS_RANDOM_STRATCMPL_IOERR (XFS_RANDOM_DEFAULT/10)
93-
#define XFS_RANDOM_DIOWRITE_IOERR (XFS_RANDOM_DEFAULT/10)
94-
#define XFS_RANDOM_BMAPIFORMAT XFS_RANDOM_DEFAULT
95-
#define XFS_RANDOM_FREE_EXTENT 1
96-
#define XFS_RANDOM_RMAP_FINISH_ONE 1
97-
#define XFS_RANDOM_REFCOUNT_CONTINUE_UPDATE 1
98-
#define XFS_RANDOM_REFCOUNT_FINISH_ONE 1
99-
#define XFS_RANDOM_BMAP_FINISH_ONE 1
100-
#define XFS_RANDOM_AG_RESV_CRITICAL 4
101-
#define XFS_RANDOM_LOG_BAD_CRC 1
102-
#define XFS_RANDOM_LOG_ITEM_PIN 1
103-
#define XFS_RANDOM_BUF_LRU_REF 2
104-
#define XFS_RANDOM_FORCE_SCRUB_REPAIR 1
105-
#define XFS_RANDOM_FORCE_SUMMARY_RECALC 1
106-
#define XFS_RANDOM_IUNLINK_FALLBACK (XFS_RANDOM_DEFAULT/10)
107-
#define XFS_RANDOM_BUF_IOERROR XFS_RANDOM_DEFAULT
108-
#define XFS_RANDOM_REDUCE_MAX_IEXTENTS 1
109-
#define XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT 1
110-
#define XFS_RANDOM_AG_RESV_FAIL 1
111-
#define XFS_RANDOM_LARP 1
112-
#define XFS_RANDOM_DA_LEAF_SPLIT 1
113-
#define XFS_RANDOM_ATTR_LEAF_TO_NODE 1
114-
#define XFS_RANDOM_WB_DELAY_MS 3000
115-
#define XFS_RANDOM_WRITE_DELAY_MS 3000
116-
#define XFS_RANDOM_EXCHMAPS_FINISH_ONE 1
117-
#define XFS_RANDOM_METAFILE_RESV_CRITICAL 4
82+
83+
/*
84+
* Table of errror injection knobs. The parameters to the XFS_ERRTAG macro are:
85+
* 1. The XFS_ERRTAG_ flag but without the prefix;
86+
* 2. The name of the sysfs knob; and
87+
* 3. The default value for the knob.
88+
*/
89+
#ifdef XFS_ERRTAG
90+
# undef XFS_ERRTAGS
91+
# define XFS_ERRTAGS \
92+
XFS_ERRTAG(NOERROR, noerror, XFS_RANDOM_DEFAULT) \
93+
XFS_ERRTAG(IFLUSH_1, iflush1, XFS_RANDOM_DEFAULT) \
94+
XFS_ERRTAG(IFLUSH_2, iflush2, XFS_RANDOM_DEFAULT) \
95+
XFS_ERRTAG(IFLUSH_3, iflush3, XFS_RANDOM_DEFAULT) \
96+
XFS_ERRTAG(IFLUSH_4, iflush4, XFS_RANDOM_DEFAULT) \
97+
XFS_ERRTAG(IFLUSH_5, iflush5, XFS_RANDOM_DEFAULT) \
98+
XFS_ERRTAG(IFLUSH_6, iflush6, XFS_RANDOM_DEFAULT) \
99+
XFS_ERRTAG(DA_READ_BUF, dareadbuf, XFS_RANDOM_DEFAULT) \
100+
XFS_ERRTAG(BTREE_CHECK_LBLOCK, btree_chk_lblk, XFS_RANDOM_DEFAULT/4) \
101+
XFS_ERRTAG(BTREE_CHECK_SBLOCK, btree_chk_sblk, XFS_RANDOM_DEFAULT) \
102+
XFS_ERRTAG(ALLOC_READ_AGF, readagf, XFS_RANDOM_DEFAULT) \
103+
XFS_ERRTAG(IALLOC_READ_AGI, readagi, XFS_RANDOM_DEFAULT) \
104+
XFS_ERRTAG(ITOBP_INOTOBP, itobp, XFS_RANDOM_DEFAULT) \
105+
XFS_ERRTAG(IUNLINK, iunlink, XFS_RANDOM_DEFAULT) \
106+
XFS_ERRTAG(IUNLINK_REMOVE, iunlinkrm, XFS_RANDOM_DEFAULT) \
107+
XFS_ERRTAG(DIR_INO_VALIDATE, dirinovalid, XFS_RANDOM_DEFAULT) \
108+
XFS_ERRTAG(BULKSTAT_READ_CHUNK, bulkstat, XFS_RANDOM_DEFAULT) \
109+
XFS_ERRTAG(IODONE_IOERR, logiodone, XFS_RANDOM_DEFAULT/10) \
110+
XFS_ERRTAG(STRATREAD_IOERR, stratread, XFS_RANDOM_DEFAULT/10) \
111+
XFS_ERRTAG(STRATCMPL_IOERR, stratcmpl, XFS_RANDOM_DEFAULT/10) \
112+
XFS_ERRTAG(DIOWRITE_IOERR, diowrite, XFS_RANDOM_DEFAULT/10) \
113+
XFS_ERRTAG(BMAPIFORMAT, bmapifmt, XFS_RANDOM_DEFAULT) \
114+
XFS_ERRTAG(FREE_EXTENT, free_extent, 1) \
115+
XFS_ERRTAG(RMAP_FINISH_ONE, rmap_finish_one, 1) \
116+
XFS_ERRTAG(REFCOUNT_CONTINUE_UPDATE, refcount_continue_update, 1) \
117+
XFS_ERRTAG(REFCOUNT_FINISH_ONE, refcount_finish_one, 1) \
118+
XFS_ERRTAG(BMAP_FINISH_ONE, bmap_finish_one, 1) \
119+
XFS_ERRTAG(AG_RESV_CRITICAL, ag_resv_critical, 4) \
120+
XFS_ERRTAG(LOG_BAD_CRC, log_bad_crc, 1) \
121+
XFS_ERRTAG(LOG_ITEM_PIN, log_item_pin, 1) \
122+
XFS_ERRTAG(BUF_LRU_REF, buf_lru_ref, 2) \
123+
XFS_ERRTAG(FORCE_SCRUB_REPAIR, force_repair, 1) \
124+
XFS_ERRTAG(FORCE_SUMMARY_RECALC, bad_summary, 1) \
125+
XFS_ERRTAG(IUNLINK_FALLBACK, iunlink_fallback, XFS_RANDOM_DEFAULT/10) \
126+
XFS_ERRTAG(BUF_IOERROR, buf_ioerror, XFS_RANDOM_DEFAULT) \
127+
XFS_ERRTAG(REDUCE_MAX_IEXTENTS, reduce_max_iextents, 1) \
128+
XFS_ERRTAG(BMAP_ALLOC_MINLEN_EXTENT, bmap_alloc_minlen_extent, 1) \
129+
XFS_ERRTAG(AG_RESV_FAIL, ag_resv_fail, 1) \
130+
XFS_ERRTAG(LARP, larp, 1) \
131+
XFS_ERRTAG(DA_LEAF_SPLIT, da_leaf_split, 1) \
132+
XFS_ERRTAG(ATTR_LEAF_TO_NODE, attr_leaf_to_node, 1) \
133+
XFS_ERRTAG(WB_DELAY_MS, wb_delay_ms, 3000) \
134+
XFS_ERRTAG(WRITE_DELAY_MS, write_delay_ms, 3000) \
135+
XFS_ERRTAG(EXCHMAPS_FINISH_ONE, exchmaps_finish_one, 1) \
136+
XFS_ERRTAG(METAFILE_RESV_CRITICAL, metafile_resv_crit, 4)
137+
#endif /* XFS_ERRTAG */
118138

119139
#endif /* __XFS_ERRORTAG_H_ */

fs/xfs/xfs_error.c

Lines changed: 20 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -10,61 +10,17 @@
1010
#include "xfs_log_format.h"
1111
#include "xfs_trans_resv.h"
1212
#include "xfs_mount.h"
13-
#include "xfs_errortag.h"
1413
#include "xfs_error.h"
1514
#include "xfs_sysfs.h"
1615
#include "xfs_inode.h"
1716

1817
#ifdef DEBUG
1918

20-
static unsigned int xfs_errortag_random_default[] = {
21-
XFS_RANDOM_DEFAULT,
22-
XFS_RANDOM_IFLUSH_1,
23-
XFS_RANDOM_IFLUSH_2,
24-
XFS_RANDOM_IFLUSH_3,
25-
XFS_RANDOM_IFLUSH_4,
26-
XFS_RANDOM_IFLUSH_5,
27-
XFS_RANDOM_IFLUSH_6,
28-
XFS_RANDOM_DA_READ_BUF,
29-
XFS_RANDOM_BTREE_CHECK_LBLOCK,
30-
XFS_RANDOM_BTREE_CHECK_SBLOCK,
31-
XFS_RANDOM_ALLOC_READ_AGF,
32-
XFS_RANDOM_IALLOC_READ_AGI,
33-
XFS_RANDOM_ITOBP_INOTOBP,
34-
XFS_RANDOM_IUNLINK,
35-
XFS_RANDOM_IUNLINK_REMOVE,
36-
XFS_RANDOM_DIR_INO_VALIDATE,
37-
XFS_RANDOM_BULKSTAT_READ_CHUNK,
38-
XFS_RANDOM_IODONE_IOERR,
39-
XFS_RANDOM_STRATREAD_IOERR,
40-
XFS_RANDOM_STRATCMPL_IOERR,
41-
XFS_RANDOM_DIOWRITE_IOERR,
42-
XFS_RANDOM_BMAPIFORMAT,
43-
XFS_RANDOM_FREE_EXTENT,
44-
XFS_RANDOM_RMAP_FINISH_ONE,
45-
XFS_RANDOM_REFCOUNT_CONTINUE_UPDATE,
46-
XFS_RANDOM_REFCOUNT_FINISH_ONE,
47-
XFS_RANDOM_BMAP_FINISH_ONE,
48-
XFS_RANDOM_AG_RESV_CRITICAL,
49-
0, /* XFS_RANDOM_DROP_WRITES has been removed */
50-
XFS_RANDOM_LOG_BAD_CRC,
51-
XFS_RANDOM_LOG_ITEM_PIN,
52-
XFS_RANDOM_BUF_LRU_REF,
53-
XFS_RANDOM_FORCE_SCRUB_REPAIR,
54-
XFS_RANDOM_FORCE_SUMMARY_RECALC,
55-
XFS_RANDOM_IUNLINK_FALLBACK,
56-
XFS_RANDOM_BUF_IOERROR,
57-
XFS_RANDOM_REDUCE_MAX_IEXTENTS,
58-
XFS_RANDOM_BMAP_ALLOC_MINLEN_EXTENT,
59-
XFS_RANDOM_AG_RESV_FAIL,
60-
XFS_RANDOM_LARP,
61-
XFS_RANDOM_DA_LEAF_SPLIT,
62-
XFS_RANDOM_ATTR_LEAF_TO_NODE,
63-
XFS_RANDOM_WB_DELAY_MS,
64-
XFS_RANDOM_WRITE_DELAY_MS,
65-
XFS_RANDOM_EXCHMAPS_FINISH_ONE,
66-
XFS_RANDOM_METAFILE_RESV_CRITICAL,
67-
};
19+
#define XFS_ERRTAG(_tag, _name, _default) \
20+
[XFS_ERRTAG_##_tag] = (_default),
21+
#include "xfs_errortag.h"
22+
static unsigned int xfs_errortag_random_default[] = { XFS_ERRTAGS };
23+
#undef XFS_ERRTAG
6824

6925
struct xfs_errortag_attr {
7026
struct attribute attr;
@@ -125,110 +81,28 @@ static const struct sysfs_ops xfs_errortag_sysfs_ops = {
12581
.store = xfs_errortag_attr_store,
12682
};
12783

128-
#define XFS_ERRORTAG_ATTR_RW(_name, _tag) \
84+
#define XFS_ERRTAG(_tag, _name, _default) \
12985
static struct xfs_errortag_attr xfs_errortag_attr_##_name = { \
13086
.attr = {.name = __stringify(_name), \
13187
.mode = VERIFY_OCTAL_PERMISSIONS(S_IWUSR | S_IRUGO) }, \
132-
.tag = (_tag), \
133-
}
134-
135-
#define XFS_ERRORTAG_ATTR_LIST(_name) &xfs_errortag_attr_##_name.attr
136-
137-
XFS_ERRORTAG_ATTR_RW(noerror, XFS_ERRTAG_NOERROR);
138-
XFS_ERRORTAG_ATTR_RW(iflush1, XFS_ERRTAG_IFLUSH_1);
139-
XFS_ERRORTAG_ATTR_RW(iflush2, XFS_ERRTAG_IFLUSH_2);
140-
XFS_ERRORTAG_ATTR_RW(iflush3, XFS_ERRTAG_IFLUSH_3);
141-
XFS_ERRORTAG_ATTR_RW(iflush4, XFS_ERRTAG_IFLUSH_4);
142-
XFS_ERRORTAG_ATTR_RW(iflush5, XFS_ERRTAG_IFLUSH_5);
143-
XFS_ERRORTAG_ATTR_RW(iflush6, XFS_ERRTAG_IFLUSH_6);
144-
XFS_ERRORTAG_ATTR_RW(dareadbuf, XFS_ERRTAG_DA_READ_BUF);
145-
XFS_ERRORTAG_ATTR_RW(btree_chk_lblk, XFS_ERRTAG_BTREE_CHECK_LBLOCK);
146-
XFS_ERRORTAG_ATTR_RW(btree_chk_sblk, XFS_ERRTAG_BTREE_CHECK_SBLOCK);
147-
XFS_ERRORTAG_ATTR_RW(readagf, XFS_ERRTAG_ALLOC_READ_AGF);
148-
XFS_ERRORTAG_ATTR_RW(readagi, XFS_ERRTAG_IALLOC_READ_AGI);
149-
XFS_ERRORTAG_ATTR_RW(itobp, XFS_ERRTAG_ITOBP_INOTOBP);
150-
XFS_ERRORTAG_ATTR_RW(iunlink, XFS_ERRTAG_IUNLINK);
151-
XFS_ERRORTAG_ATTR_RW(iunlinkrm, XFS_ERRTAG_IUNLINK_REMOVE);
152-
XFS_ERRORTAG_ATTR_RW(dirinovalid, XFS_ERRTAG_DIR_INO_VALIDATE);
153-
XFS_ERRORTAG_ATTR_RW(bulkstat, XFS_ERRTAG_BULKSTAT_READ_CHUNK);
154-
XFS_ERRORTAG_ATTR_RW(logiodone, XFS_ERRTAG_IODONE_IOERR);
155-
XFS_ERRORTAG_ATTR_RW(stratread, XFS_ERRTAG_STRATREAD_IOERR);
156-
XFS_ERRORTAG_ATTR_RW(stratcmpl, XFS_ERRTAG_STRATCMPL_IOERR);
157-
XFS_ERRORTAG_ATTR_RW(diowrite, XFS_ERRTAG_DIOWRITE_IOERR);
158-
XFS_ERRORTAG_ATTR_RW(bmapifmt, XFS_ERRTAG_BMAPIFORMAT);
159-
XFS_ERRORTAG_ATTR_RW(free_extent, XFS_ERRTAG_FREE_EXTENT);
160-
XFS_ERRORTAG_ATTR_RW(rmap_finish_one, XFS_ERRTAG_RMAP_FINISH_ONE);
161-
XFS_ERRORTAG_ATTR_RW(refcount_continue_update, XFS_ERRTAG_REFCOUNT_CONTINUE_UPDATE);
162-
XFS_ERRORTAG_ATTR_RW(refcount_finish_one, XFS_ERRTAG_REFCOUNT_FINISH_ONE);
163-
XFS_ERRORTAG_ATTR_RW(bmap_finish_one, XFS_ERRTAG_BMAP_FINISH_ONE);
164-
XFS_ERRORTAG_ATTR_RW(ag_resv_critical, XFS_ERRTAG_AG_RESV_CRITICAL);
165-
XFS_ERRORTAG_ATTR_RW(log_bad_crc, XFS_ERRTAG_LOG_BAD_CRC);
166-
XFS_ERRORTAG_ATTR_RW(log_item_pin, XFS_ERRTAG_LOG_ITEM_PIN);
167-
XFS_ERRORTAG_ATTR_RW(buf_lru_ref, XFS_ERRTAG_BUF_LRU_REF);
168-
XFS_ERRORTAG_ATTR_RW(force_repair, XFS_ERRTAG_FORCE_SCRUB_REPAIR);
169-
XFS_ERRORTAG_ATTR_RW(bad_summary, XFS_ERRTAG_FORCE_SUMMARY_RECALC);
170-
XFS_ERRORTAG_ATTR_RW(iunlink_fallback, XFS_ERRTAG_IUNLINK_FALLBACK);
171-
XFS_ERRORTAG_ATTR_RW(buf_ioerror, XFS_ERRTAG_BUF_IOERROR);
172-
XFS_ERRORTAG_ATTR_RW(reduce_max_iextents, XFS_ERRTAG_REDUCE_MAX_IEXTENTS);
173-
XFS_ERRORTAG_ATTR_RW(bmap_alloc_minlen_extent, XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT);
174-
XFS_ERRORTAG_ATTR_RW(ag_resv_fail, XFS_ERRTAG_AG_RESV_FAIL);
175-
XFS_ERRORTAG_ATTR_RW(larp, XFS_ERRTAG_LARP);
176-
XFS_ERRORTAG_ATTR_RW(da_leaf_split, XFS_ERRTAG_DA_LEAF_SPLIT);
177-
XFS_ERRORTAG_ATTR_RW(attr_leaf_to_node, XFS_ERRTAG_ATTR_LEAF_TO_NODE);
178-
XFS_ERRORTAG_ATTR_RW(wb_delay_ms, XFS_ERRTAG_WB_DELAY_MS);
179-
XFS_ERRORTAG_ATTR_RW(write_delay_ms, XFS_ERRTAG_WRITE_DELAY_MS);
180-
XFS_ERRORTAG_ATTR_RW(exchmaps_finish_one, XFS_ERRTAG_EXCHMAPS_FINISH_ONE);
181-
XFS_ERRORTAG_ATTR_RW(metafile_resv_crit, XFS_ERRTAG_METAFILE_RESV_CRITICAL);
88+
.tag = XFS_ERRTAG_##_tag, \
89+
};
90+
#include "xfs_errortag.h"
91+
XFS_ERRTAGS
92+
#undef XFS_ERRTAG
18293

94+
#define XFS_ERRTAG(_tag, _name, _default) \
95+
&xfs_errortag_attr_##_name.attr,
96+
#include "xfs_errortag.h"
18397
static struct attribute *xfs_errortag_attrs[] = {
184-
XFS_ERRORTAG_ATTR_LIST(noerror),
185-
XFS_ERRORTAG_ATTR_LIST(iflush1),
186-
XFS_ERRORTAG_ATTR_LIST(iflush2),
187-
XFS_ERRORTAG_ATTR_LIST(iflush3),
188-
XFS_ERRORTAG_ATTR_LIST(iflush4),
189-
XFS_ERRORTAG_ATTR_LIST(iflush5),
190-
XFS_ERRORTAG_ATTR_LIST(iflush6),
191-
XFS_ERRORTAG_ATTR_LIST(dareadbuf),
192-
XFS_ERRORTAG_ATTR_LIST(btree_chk_lblk),
193-
XFS_ERRORTAG_ATTR_LIST(btree_chk_sblk),
194-
XFS_ERRORTAG_ATTR_LIST(readagf),
195-
XFS_ERRORTAG_ATTR_LIST(readagi),
196-
XFS_ERRORTAG_ATTR_LIST(itobp),
197-
XFS_ERRORTAG_ATTR_LIST(iunlink),
198-
XFS_ERRORTAG_ATTR_LIST(iunlinkrm),
199-
XFS_ERRORTAG_ATTR_LIST(dirinovalid),
200-
XFS_ERRORTAG_ATTR_LIST(bulkstat),
201-
XFS_ERRORTAG_ATTR_LIST(logiodone),
202-
XFS_ERRORTAG_ATTR_LIST(stratread),
203-
XFS_ERRORTAG_ATTR_LIST(stratcmpl),
204-
XFS_ERRORTAG_ATTR_LIST(diowrite),
205-
XFS_ERRORTAG_ATTR_LIST(bmapifmt),
206-
XFS_ERRORTAG_ATTR_LIST(free_extent),
207-
XFS_ERRORTAG_ATTR_LIST(rmap_finish_one),
208-
XFS_ERRORTAG_ATTR_LIST(refcount_continue_update),
209-
XFS_ERRORTAG_ATTR_LIST(refcount_finish_one),
210-
XFS_ERRORTAG_ATTR_LIST(bmap_finish_one),
211-
XFS_ERRORTAG_ATTR_LIST(ag_resv_critical),
212-
XFS_ERRORTAG_ATTR_LIST(log_bad_crc),
213-
XFS_ERRORTAG_ATTR_LIST(log_item_pin),
214-
XFS_ERRORTAG_ATTR_LIST(buf_lru_ref),
215-
XFS_ERRORTAG_ATTR_LIST(force_repair),
216-
XFS_ERRORTAG_ATTR_LIST(bad_summary),
217-
XFS_ERRORTAG_ATTR_LIST(iunlink_fallback),
218-
XFS_ERRORTAG_ATTR_LIST(buf_ioerror),
219-
XFS_ERRORTAG_ATTR_LIST(reduce_max_iextents),
220-
XFS_ERRORTAG_ATTR_LIST(bmap_alloc_minlen_extent),
221-
XFS_ERRORTAG_ATTR_LIST(ag_resv_fail),
222-
XFS_ERRORTAG_ATTR_LIST(larp),
223-
XFS_ERRORTAG_ATTR_LIST(da_leaf_split),
224-
XFS_ERRORTAG_ATTR_LIST(attr_leaf_to_node),
225-
XFS_ERRORTAG_ATTR_LIST(wb_delay_ms),
226-
XFS_ERRORTAG_ATTR_LIST(write_delay_ms),
227-
XFS_ERRORTAG_ATTR_LIST(exchmaps_finish_one),
228-
XFS_ERRORTAG_ATTR_LIST(metafile_resv_crit),
229-
NULL,
98+
XFS_ERRTAGS
99+
NULL
230100
};
231101
ATTRIBUTE_GROUPS(xfs_errortag);
102+
#undef XFS_ERRTAG
103+
104+
/* -1 because XFS_ERRTAG_DROP_WRITES got removed, + 1 for NULL termination */
105+
static_assert(ARRAY_SIZE(xfs_errortag_attrs) == XFS_ERRTAG_MAX);
232106

233107
static const struct kobj_type xfs_errortag_ktype = {
234108
.release = xfs_sysfs_release,

0 commit comments

Comments
 (0)