|
10 | 10 | #include "xfs_log_format.h" |
11 | 11 | #include "xfs_trans_resv.h" |
12 | 12 | #include "xfs_mount.h" |
13 | | -#include "xfs_errortag.h" |
14 | 13 | #include "xfs_error.h" |
15 | 14 | #include "xfs_sysfs.h" |
16 | 15 | #include "xfs_inode.h" |
17 | 16 |
|
18 | 17 | #ifdef DEBUG |
19 | 18 |
|
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 |
68 | 24 |
|
69 | 25 | struct xfs_errortag_attr { |
70 | 26 | struct attribute attr; |
@@ -125,110 +81,28 @@ static const struct sysfs_ops xfs_errortag_sysfs_ops = { |
125 | 81 | .store = xfs_errortag_attr_store, |
126 | 82 | }; |
127 | 83 |
|
128 | | -#define XFS_ERRORTAG_ATTR_RW(_name, _tag) \ |
| 84 | +#define XFS_ERRTAG(_tag, _name, _default) \ |
129 | 85 | static struct xfs_errortag_attr xfs_errortag_attr_##_name = { \ |
130 | 86 | .attr = {.name = __stringify(_name), \ |
131 | 87 | .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 |
182 | 93 |
|
| 94 | +#define XFS_ERRTAG(_tag, _name, _default) \ |
| 95 | + &xfs_errortag_attr_##_name.attr, |
| 96 | +#include "xfs_errortag.h" |
183 | 97 | 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 |
230 | 100 | }; |
231 | 101 | 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); |
232 | 106 |
|
233 | 107 | static const struct kobj_type xfs_errortag_ktype = { |
234 | 108 | .release = xfs_sysfs_release, |
|
0 commit comments