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