| 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 \ |
| 93 | XFS_ERRTAG(NOERROR, noerror, XFS_RANDOM_DEFAULT) \ |
| 94 | XFS_ERRTAG(IFLUSH_1, iflush1, XFS_RANDOM_DEFAULT) \ |
| 95 | XFS_ERRTAG(IFLUSH_2, iflush2, XFS_RANDOM_DEFAULT) \ |
| 96 | XFS_ERRTAG(IFLUSH_3, iflush3, XFS_RANDOM_DEFAULT) \ |
| 97 | XFS_ERRTAG(IFLUSH_4, iflush4, XFS_RANDOM_DEFAULT) \ |
| 98 | XFS_ERRTAG(IFLUSH_5, iflush5, XFS_RANDOM_DEFAULT) \ |
| 99 | XFS_ERRTAG(IFLUSH_6, iflush6, XFS_RANDOM_DEFAULT) \ |
| 100 | XFS_ERRTAG(DA_READ_BUF, dareadbuf, XFS_RANDOM_DEFAULT) \ |
| 101 | XFS_ERRTAG(BTREE_CHECK_LBLOCK, btree_chk_lblk, XFS_RANDOM_DEFAULT/4) \ |
| 102 | XFS_ERRTAG(BTREE_CHECK_SBLOCK, btree_chk_sblk, XFS_RANDOM_DEFAULT) \ |
| 103 | XFS_ERRTAG(ALLOC_READ_AGF, readagf, XFS_RANDOM_DEFAULT) \ |
| 104 | XFS_ERRTAG(IALLOC_READ_AGI, readagi, XFS_RANDOM_DEFAULT) \ |
| 105 | XFS_ERRTAG(ITOBP_INOTOBP, itobp, XFS_RANDOM_DEFAULT) \ |
| 106 | XFS_ERRTAG(IUNLINK, iunlink, XFS_RANDOM_DEFAULT) \ |
| 107 | XFS_ERRTAG(IUNLINK_REMOVE, iunlinkrm, XFS_RANDOM_DEFAULT) \ |
| 108 | XFS_ERRTAG(DIR_INO_VALIDATE, dirinovalid, XFS_RANDOM_DEFAULT) \ |
| 109 | XFS_ERRTAG(BULKSTAT_READ_CHUNK, bulkstat, XFS_RANDOM_DEFAULT) \ |
| 110 | XFS_ERRTAG(IODONE_IOERR, logiodone, XFS_RANDOM_DEFAULT/10) \ |
| 111 | XFS_ERRTAG(STRATREAD_IOERR, stratread, XFS_RANDOM_DEFAULT/10) \ |
| 112 | XFS_ERRTAG(STRATCMPL_IOERR, stratcmpl, XFS_RANDOM_DEFAULT/10) \ |
| 113 | XFS_ERRTAG(DIOWRITE_IOERR, diowrite, XFS_RANDOM_DEFAULT/10) \ |
| 114 | XFS_ERRTAG(BMAPIFORMAT, bmapifmt, XFS_RANDOM_DEFAULT) \ |
| 115 | XFS_ERRTAG(FREE_EXTENT, free_extent, 1) \ |
| 116 | XFS_ERRTAG(RMAP_FINISH_ONE, rmap_finish_one, 1) \ |
| 117 | XFS_ERRTAG(REFCOUNT_CONTINUE_UPDATE, refcount_continue_update, 1) \ |
| 118 | XFS_ERRTAG(REFCOUNT_FINISH_ONE, refcount_finish_one, 1) \ |
| 119 | XFS_ERRTAG(BMAP_FINISH_ONE, bmap_finish_one, 1) \ |
| 120 | XFS_ERRTAG(AG_RESV_CRITICAL, ag_resv_critical, 4) \ |
| 121 | XFS_ERRTAG(LOG_BAD_CRC, log_bad_crc, 1) \ |
| 122 | XFS_ERRTAG(LOG_ITEM_PIN, log_item_pin, 1) \ |
| 123 | XFS_ERRTAG(BUF_LRU_REF, buf_lru_ref, 2) \ |
| 124 | XFS_ERRTAG(FORCE_SCRUB_REPAIR, force_repair, 1) \ |
| 125 | XFS_ERRTAG(FORCE_SUMMARY_RECALC, bad_summary, 1) \ |
| 126 | XFS_ERRTAG(IUNLINK_FALLBACK, iunlink_fallback, XFS_RANDOM_DEFAULT/10) \ |
| 127 | XFS_ERRTAG(BUF_IOERROR, buf_ioerror, XFS_RANDOM_DEFAULT) \ |
| 128 | XFS_ERRTAG(REDUCE_MAX_IEXTENTS, reduce_max_iextents, 1) \ |
| 129 | XFS_ERRTAG(BMAP_ALLOC_MINLEN_EXTENT, bmap_alloc_minlen_extent, 1) \ |
| 130 | XFS_ERRTAG(AG_RESV_FAIL, ag_resv_fail, 1) \ |
| 131 | XFS_ERRTAG(LARP, larp, 1) \ |
| 132 | XFS_ERRTAG(DA_LEAF_SPLIT, da_leaf_split, 1) \ |
| 133 | XFS_ERRTAG(ATTR_LEAF_TO_NODE, attr_leaf_to_node, 1) \ |
| 134 | XFS_ERRTAG(WB_DELAY_MS, wb_delay_ms, 3000) \ |
| 135 | XFS_ERRTAG(WRITE_DELAY_MS, write_delay_ms, 3000) \ |
| 136 | XFS_ERRTAG(EXCHMAPS_FINISH_ONE, exchmaps_finish_one, 1) \ |
| 137 | XFS_ERRTAG(METAFILE_RESV_CRITICAL, metafile_resv_crit, 4) \ |
| 138 | XFS_ERRTAG(FORCE_ZERO_RANGE, force_zero_range, 4) |
| 139 | #endif /* XFS_ERRTAG */ |
| 140 | |
| 141 | #endif /* __XFS_ERRORTAG_H_ */ |
| 142 | |