1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
4 * Copyright (C) 2017 Oracle.
5 * All Rights Reserved.
6 */
7#if !defined(__XFS_ERRORTAG_H_) || defined(XFS_ERRTAG)
8#define __XFS_ERRORTAG_H_
9
10/*
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.
17 */
18
19/*
20 * These are the actual error injection tags. The numbers should be consecutive
21 * because arrays are sized based on the maximum.
22 */
23#define XFS_ERRTAG_NOERROR 0
24#define XFS_ERRTAG_IFLUSH_1 1
25#define XFS_ERRTAG_IFLUSH_2 2
26#define XFS_ERRTAG_IFLUSH_3 3
27#define XFS_ERRTAG_IFLUSH_4 4
28#define XFS_ERRTAG_IFLUSH_5 5
29#define XFS_ERRTAG_IFLUSH_6 6
30#define XFS_ERRTAG_DA_READ_BUF 7
31#define XFS_ERRTAG_BTREE_CHECK_LBLOCK 8
32#define XFS_ERRTAG_BTREE_CHECK_SBLOCK 9
33#define XFS_ERRTAG_ALLOC_READ_AGF 10
34#define XFS_ERRTAG_IALLOC_READ_AGI 11
35#define XFS_ERRTAG_ITOBP_INOTOBP 12
36#define XFS_ERRTAG_IUNLINK 13
37#define XFS_ERRTAG_IUNLINK_REMOVE 14
38#define XFS_ERRTAG_DIR_INO_VALIDATE 15
39#define XFS_ERRTAG_BULKSTAT_READ_CHUNK 16
40#define XFS_ERRTAG_IODONE_IOERR 17
41#define XFS_ERRTAG_STRATREAD_IOERR 18
42#define XFS_ERRTAG_STRATCMPL_IOERR 19
43#define XFS_ERRTAG_DIOWRITE_IOERR 20
44#define XFS_ERRTAG_BMAPIFORMAT 21
45#define XFS_ERRTAG_FREE_EXTENT 22
46#define XFS_ERRTAG_RMAP_FINISH_ONE 23
47#define XFS_ERRTAG_REFCOUNT_CONTINUE_UPDATE 24
48#define XFS_ERRTAG_REFCOUNT_FINISH_ONE 25
49#define XFS_ERRTAG_BMAP_FINISH_ONE 26
50#define XFS_ERRTAG_AG_RESV_CRITICAL 27
51
52/*
53 * Drop-writes support removed because write error handling cannot trash
54 * pre-existing delalloc extents in any useful way anymore. We retain the
55 * definition so that we can reject it as an invalid value in
56 * xfs_errortag_valid().
57 */
58#define XFS_ERRTAG_DROP_WRITES 28
59#define XFS_ERRTAG_LOG_BAD_CRC 29
60#define XFS_ERRTAG_LOG_ITEM_PIN 30
61#define XFS_ERRTAG_BUF_LRU_REF 31
62#define XFS_ERRTAG_FORCE_SCRUB_REPAIR 32
63#define XFS_ERRTAG_FORCE_SUMMARY_RECALC 33
64#define XFS_ERRTAG_IUNLINK_FALLBACK 34
65#define XFS_ERRTAG_BUF_IOERROR 35
66#define XFS_ERRTAG_REDUCE_MAX_IEXTENTS 36
67#define XFS_ERRTAG_BMAP_ALLOC_MINLEN_EXTENT 37
68#define XFS_ERRTAG_AG_RESV_FAIL 38
69#define XFS_ERRTAG_LARP 39
70#define XFS_ERRTAG_DA_LEAF_SPLIT 40
71#define XFS_ERRTAG_ATTR_LEAF_TO_NODE 41
72#define XFS_ERRTAG_WB_DELAY_MS 42
73#define XFS_ERRTAG_WRITE_DELAY_MS 43
74#define XFS_ERRTAG_EXCHMAPS_FINISH_ONE 44
75#define XFS_ERRTAG_METAFILE_RESV_CRITICAL 45
76#define XFS_ERRTAG_FORCE_ZERO_RANGE 46
77#define XFS_ERRTAG_MAX 47
78
79/*
80 * Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
81 */
82#define XFS_RANDOM_DEFAULT 100
83
84/*
85 * Table of errror injection knobs. The parameters to the XFS_ERRTAG macro are:
86 * 1. The XFS_ERRTAG_ flag but without the prefix;
87 * 2. The name of the sysfs knob; and
88 * 3. The default value for the knob.
89 */
90#ifdef XFS_ERRTAG
91# undef XFS_ERRTAGS
92# define XFS_ERRTAGS \
93XFS_ERRTAG(NOERROR, noerror, XFS_RANDOM_DEFAULT) \
94XFS_ERRTAG(IFLUSH_1, iflush1, XFS_RANDOM_DEFAULT) \
95XFS_ERRTAG(IFLUSH_2, iflush2, XFS_RANDOM_DEFAULT) \
96XFS_ERRTAG(IFLUSH_3, iflush3, XFS_RANDOM_DEFAULT) \
97XFS_ERRTAG(IFLUSH_4, iflush4, XFS_RANDOM_DEFAULT) \
98XFS_ERRTAG(IFLUSH_5, iflush5, XFS_RANDOM_DEFAULT) \
99XFS_ERRTAG(IFLUSH_6, iflush6, XFS_RANDOM_DEFAULT) \
100XFS_ERRTAG(DA_READ_BUF, dareadbuf, XFS_RANDOM_DEFAULT) \
101XFS_ERRTAG(BTREE_CHECK_LBLOCK, btree_chk_lblk, XFS_RANDOM_DEFAULT/4) \
102XFS_ERRTAG(BTREE_CHECK_SBLOCK, btree_chk_sblk, XFS_RANDOM_DEFAULT) \
103XFS_ERRTAG(ALLOC_READ_AGF, readagf, XFS_RANDOM_DEFAULT) \
104XFS_ERRTAG(IALLOC_READ_AGI, readagi, XFS_RANDOM_DEFAULT) \
105XFS_ERRTAG(ITOBP_INOTOBP, itobp, XFS_RANDOM_DEFAULT) \
106XFS_ERRTAG(IUNLINK, iunlink, XFS_RANDOM_DEFAULT) \
107XFS_ERRTAG(IUNLINK_REMOVE, iunlinkrm, XFS_RANDOM_DEFAULT) \
108XFS_ERRTAG(DIR_INO_VALIDATE, dirinovalid, XFS_RANDOM_DEFAULT) \
109XFS_ERRTAG(BULKSTAT_READ_CHUNK, bulkstat, XFS_RANDOM_DEFAULT) \
110XFS_ERRTAG(IODONE_IOERR, logiodone, XFS_RANDOM_DEFAULT/10) \
111XFS_ERRTAG(STRATREAD_IOERR, stratread, XFS_RANDOM_DEFAULT/10) \
112XFS_ERRTAG(STRATCMPL_IOERR, stratcmpl, XFS_RANDOM_DEFAULT/10) \
113XFS_ERRTAG(DIOWRITE_IOERR, diowrite, XFS_RANDOM_DEFAULT/10) \
114XFS_ERRTAG(BMAPIFORMAT, bmapifmt, XFS_RANDOM_DEFAULT) \
115XFS_ERRTAG(FREE_EXTENT, free_extent, 1) \
116XFS_ERRTAG(RMAP_FINISH_ONE, rmap_finish_one, 1) \
117XFS_ERRTAG(REFCOUNT_CONTINUE_UPDATE, refcount_continue_update, 1) \
118XFS_ERRTAG(REFCOUNT_FINISH_ONE, refcount_finish_one, 1) \
119XFS_ERRTAG(BMAP_FINISH_ONE, bmap_finish_one, 1) \
120XFS_ERRTAG(AG_RESV_CRITICAL, ag_resv_critical, 4) \
121XFS_ERRTAG(LOG_BAD_CRC, log_bad_crc, 1) \
122XFS_ERRTAG(LOG_ITEM_PIN, log_item_pin, 1) \
123XFS_ERRTAG(BUF_LRU_REF, buf_lru_ref, 2) \
124XFS_ERRTAG(FORCE_SCRUB_REPAIR, force_repair, 1) \
125XFS_ERRTAG(FORCE_SUMMARY_RECALC, bad_summary, 1) \
126XFS_ERRTAG(IUNLINK_FALLBACK, iunlink_fallback, XFS_RANDOM_DEFAULT/10) \
127XFS_ERRTAG(BUF_IOERROR, buf_ioerror, XFS_RANDOM_DEFAULT) \
128XFS_ERRTAG(REDUCE_MAX_IEXTENTS, reduce_max_iextents, 1) \
129XFS_ERRTAG(BMAP_ALLOC_MINLEN_EXTENT, bmap_alloc_minlen_extent, 1) \
130XFS_ERRTAG(AG_RESV_FAIL, ag_resv_fail, 1) \
131XFS_ERRTAG(LARP, larp, 1) \
132XFS_ERRTAG(DA_LEAF_SPLIT, da_leaf_split, 1) \
133XFS_ERRTAG(ATTR_LEAF_TO_NODE, attr_leaf_to_node, 1) \
134XFS_ERRTAG(WB_DELAY_MS, wb_delay_ms, 3000) \
135XFS_ERRTAG(WRITE_DELAY_MS, write_delay_ms, 3000) \
136XFS_ERRTAG(EXCHMAPS_FINISH_ONE, exchmaps_finish_one, 1) \
137XFS_ERRTAG(METAFILE_RESV_CRITICAL, metafile_resv_crit, 4) \
138XFS_ERRTAG(FORCE_ZERO_RANGE, force_zero_range, 4)
139#endif /* XFS_ERRTAG */
140
141#endif /* __XFS_ERRORTAG_H_ */
142

source code of linux/fs/xfs/libxfs/xfs_errortag.h