xref: /linux/fs/xfs/libxfs/xfs_errortag.h (revision e445fba2d76369d72b497ecadf6b9787930693d9)
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_MAX					46
77 
78 /*
79  * Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
80  */
81 #define XFS_RANDOM_DEFAULT				100
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 */
138 
139 #endif /* __XFS_ERRORTAG_H_ */
140