~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/fault-injection/failcmd.sh

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/testing/fault-injection/failcmd.sh (Architecture sparc64) and /tools/testing/fault-injection/failcmd.sh (Architecture i386)


  1 #!/bin/bash                                         1 #!/bin/bash
  2 # SPDX-License-Identifier: GPL-2.0                  2 # SPDX-License-Identifier: GPL-2.0
  3 #                                                   3 #
  4 # NAME                                              4 # NAME
  5 #       failcmd.sh - run a command with inject      5 #       failcmd.sh - run a command with injecting slab/page allocation failures
  6 #                                                   6 #
  7 # SYNOPSIS                                          7 # SYNOPSIS
  8 #       failcmd.sh --help                           8 #       failcmd.sh --help
  9 #       failcmd.sh [<options>] command [argume      9 #       failcmd.sh [<options>] command [arguments]
 10 #                                                  10 #
 11 # DESCRIPTION                                      11 # DESCRIPTION
 12 #       Run command with injecting slab/page a     12 #       Run command with injecting slab/page allocation failures by fault
 13 #       injection.                                 13 #       injection.
 14 #                                                  14 #
 15 #       NOTE: you need to run this script as r     15 #       NOTE: you need to run this script as root.
 16 #                                                  16 #
 17                                                    17 
 18 usage()                                            18 usage()
 19 {                                                  19 {
 20         cat >&2 <<EOF                              20         cat >&2 <<EOF
 21 Usage: $0 [options] command [arguments]            21 Usage: $0 [options] command [arguments]
 22                                                    22 
 23 OPTIONS                                            23 OPTIONS
 24         -p percent                                 24         -p percent
 25         --probability=percent                      25         --probability=percent
 26                 likelihood of failure injectio     26                 likelihood of failure injection, in percent.
 27                 Default value is 1                 27                 Default value is 1
 28                                                    28 
 29         -t value                                   29         -t value
 30         --times=value                              30         --times=value
 31                 specifies how many times failu     31                 specifies how many times failures may happen at most.
 32                 Default value is 1                 32                 Default value is 1
 33                                                    33 
 34         --oom-kill-allocating-task=value           34         --oom-kill-allocating-task=value
 35                 set /proc/sys/vm/oom_kill_allo     35                 set /proc/sys/vm/oom_kill_allocating_task to specified value
 36                 before running the command.        36                 before running the command.
 37                 Default value is 1                 37                 Default value is 1
 38                                                    38 
 39         -h, --help                                 39         -h, --help
 40                 Display a usage message and ex     40                 Display a usage message and exit
 41                                                    41 
 42         --interval=value, --space=value, --ver     42         --interval=value, --space=value, --verbose=value, --task-filter=value,
 43         --stacktrace-depth=value, --require-st     43         --stacktrace-depth=value, --require-start=value, --require-end=value,
 44         --reject-start=value, --reject-end=val     44         --reject-start=value, --reject-end=value, --ignore-gfp-wait=value
 45                 See Documentation/fault-inject     45                 See Documentation/fault-injection/fault-injection.rst for more
 46                 information                        46                 information
 47                                                    47 
 48         failslab options:                          48         failslab options:
 49         --cache-filter=value                       49         --cache-filter=value
 50                                                    50 
 51         fail_page_alloc options:                   51         fail_page_alloc options:
 52         --ignore-gfp-highmem=value, --min-orde     52         --ignore-gfp-highmem=value, --min-order=value
 53                                                    53 
 54 ENVIRONMENT                                        54 ENVIRONMENT
 55         FAILCMD_TYPE                               55         FAILCMD_TYPE
 56                 The following values for FAILC     56                 The following values for FAILCMD_TYPE are recognized:
 57                                                    57 
 58                 failslab                           58                 failslab
 59                         inject slab allocation     59                         inject slab allocation failures
 60                 fail_page_alloc                    60                 fail_page_alloc
 61                         inject page allocation     61                         inject page allocation failures
 62                                                    62 
 63                 If FAILCMD_TYPE is not defined     63                 If FAILCMD_TYPE is not defined, then failslab is used.
 64 EOF                                                64 EOF
 65 }                                                  65 }
 66                                                    66 
 67 exit_if_not_hex() {                                67 exit_if_not_hex() {
 68     local value="$1"                               68     local value="$1"
 69     if ! [[ $value =~ ^0x[0-9a-fA-F]+$ ]]; the     69     if ! [[ $value =~ ^0x[0-9a-fA-F]+$ ]]; then
 70         echo "Error: The provided value '$valu     70         echo "Error: The provided value '$value' is not a valid hexadecimal number." >&2
 71         exit 1                                     71         exit 1
 72     fi                                             72     fi
 73 }                                                  73 }
 74                                                    74 
 75 if [ $UID != 0 ]; then                             75 if [ $UID != 0 ]; then
 76         echo must be run as root >&2               76         echo must be run as root >&2
 77         exit 1                                     77         exit 1
 78 fi                                                 78 fi
 79                                                    79 
 80 DEBUGFS=`mount -t debugfs | head -1 | awk '{ p     80 DEBUGFS=`mount -t debugfs | head -1 | awk '{ print $3}'`
 81                                                    81 
 82 if [ ! -d "$DEBUGFS" ]; then                       82 if [ ! -d "$DEBUGFS" ]; then
 83         echo debugfs is not mounted >&2            83         echo debugfs is not mounted >&2
 84         exit 1                                     84         exit 1
 85 fi                                                 85 fi
 86                                                    86 
 87 FAILCMD_TYPE=${FAILCMD_TYPE:-failslab}             87 FAILCMD_TYPE=${FAILCMD_TYPE:-failslab}
 88 FAULTATTR=$DEBUGFS/$FAILCMD_TYPE                   88 FAULTATTR=$DEBUGFS/$FAILCMD_TYPE
 89                                                    89 
 90 if [ ! -d $FAULTATTR ]; then                       90 if [ ! -d $FAULTATTR ]; then
 91         echo $FAILCMD_TYPE is not available >&     91         echo $FAILCMD_TYPE is not available >&2
 92         exit 1                                     92         exit 1
 93 fi                                                 93 fi
 94                                                    94 
 95 LONGOPTS=probability:,interval:,times:,space:,     95 LONGOPTS=probability:,interval:,times:,space:,verbose:,task-filter:
 96 LONGOPTS=$LONGOPTS,stacktrace-depth:,require-s     96 LONGOPTS=$LONGOPTS,stacktrace-depth:,require-start:,require-end:
 97 LONGOPTS=$LONGOPTS,reject-start:,reject-end:,o     97 LONGOPTS=$LONGOPTS,reject-start:,reject-end:,oom-kill-allocating-task:,help
 98                                                    98 
 99 if [ $FAILCMD_TYPE = failslab ]; then              99 if [ $FAILCMD_TYPE = failslab ]; then
100         LONGOPTS=$LONGOPTS,ignore-gfp-wait:,ca    100         LONGOPTS=$LONGOPTS,ignore-gfp-wait:,cache-filter:
101 elif [ $FAILCMD_TYPE = fail_page_alloc ]; then    101 elif [ $FAILCMD_TYPE = fail_page_alloc ]; then
102         LONGOPTS=$LONGOPTS,ignore-gfp-wait:,ig    102         LONGOPTS=$LONGOPTS,ignore-gfp-wait:,ignore-gfp-highmem:,min-order:
103 fi                                                103 fi
104                                                   104 
105 TEMP=`getopt -o p:i:t:s:v:h --long $LONGOPTS -    105 TEMP=`getopt -o p:i:t:s:v:h --long $LONGOPTS -n 'failcmd.sh' -- "$@"`
106                                                   106 
107 if [ $? != 0 ]; then                              107 if [ $? != 0 ]; then
108         usage                                     108         usage
109         exit 1                                    109         exit 1
110 fi                                                110 fi
111                                                   111 
112 eval set -- "$TEMP"                               112 eval set -- "$TEMP"
113                                                   113 
114 fault_attr_default()                              114 fault_attr_default()
115 {                                                 115 {
116         echo N > $FAULTATTR/task-filter           116         echo N > $FAULTATTR/task-filter
117         echo 0 > $FAULTATTR/probability           117         echo 0 > $FAULTATTR/probability
118         echo 1 > $FAULTATTR/times                 118         echo 1 > $FAULTATTR/times
119 }                                                 119 }
120                                                   120 
121 fault_attr_default                                121 fault_attr_default
122                                                   122 
123 oom_kill_allocating_task_saved=`cat /proc/sys/    123 oom_kill_allocating_task_saved=`cat /proc/sys/vm/oom_kill_allocating_task`
124                                                   124 
125 restore_values()                                  125 restore_values()
126 {                                                 126 {
127         fault_attr_default                        127         fault_attr_default
128         echo $oom_kill_allocating_task_saved \    128         echo $oom_kill_allocating_task_saved \
129                 > /proc/sys/vm/oom_kill_alloca    129                 > /proc/sys/vm/oom_kill_allocating_task
130 }                                                 130 }
131                                                   131 
132 #                                                 132 #
133 # Default options                                 133 # Default options
134 #                                                 134 #
135 declare -i oom_kill_allocating_task=1             135 declare -i oom_kill_allocating_task=1
136 declare task_filter=Y                             136 declare task_filter=Y
137 declare -i probability=1                          137 declare -i probability=1
138 declare -i times=1                                138 declare -i times=1
139                                                   139 
140 while true; do                                    140 while true; do
141         case "$1" in                              141         case "$1" in
142         -p|--probability)                         142         -p|--probability)
143                 probability=$2                    143                 probability=$2
144                 shift 2                           144                 shift 2
145                 ;;                                145                 ;;
146         -i|--interval)                            146         -i|--interval)
147                 echo $2 > $FAULTATTR/interval     147                 echo $2 > $FAULTATTR/interval
148                 shift 2                           148                 shift 2
149                 ;;                                149                 ;;
150         -t|--times)                               150         -t|--times)
151                 times=$2                          151                 times=$2
152                 shift 2                           152                 shift 2
153                 ;;                                153                 ;;
154         -s|--space)                               154         -s|--space)
155                 echo $2 > $FAULTATTR/space        155                 echo $2 > $FAULTATTR/space
156                 shift 2                           156                 shift 2
157                 ;;                                157                 ;;
158         -v|--verbose)                             158         -v|--verbose)
159                 echo $2 > $FAULTATTR/verbose      159                 echo $2 > $FAULTATTR/verbose
160                 shift 2                           160                 shift 2
161                 ;;                                161                 ;;
162         --task-filter)                            162         --task-filter)
163                 task_filter=$2                    163                 task_filter=$2
164                 shift 2                           164                 shift 2
165                 ;;                                165                 ;;
166         --stacktrace-depth)                       166         --stacktrace-depth)
167                 echo $2 > $FAULTATTR/stacktrac    167                 echo $2 > $FAULTATTR/stacktrace-depth
168                 shift 2                           168                 shift 2
169                 ;;                                169                 ;;
170         --require-start)                          170         --require-start)
171                 exit_if_not_hex "$2"              171                 exit_if_not_hex "$2"
172                 echo $2 > $FAULTATTR/require-s    172                 echo $2 > $FAULTATTR/require-start
173                 shift 2                           173                 shift 2
174                 ;;                                174                 ;;
175         --require-end)                            175         --require-end)
176                 exit_if_not_hex "$2"              176                 exit_if_not_hex "$2"
177                 echo $2 > $FAULTATTR/require-e    177                 echo $2 > $FAULTATTR/require-end
178                 shift 2                           178                 shift 2
179                 ;;                                179                 ;;
180         --reject-start)                           180         --reject-start)
181                 exit_if_not_hex "$2"              181                 exit_if_not_hex "$2"
182                 echo $2 > $FAULTATTR/reject-st    182                 echo $2 > $FAULTATTR/reject-start
183                 shift 2                           183                 shift 2
184                 ;;                                184                 ;;
185         --reject-end)                             185         --reject-end)
186                 exit_if_not_hex "$2"              186                 exit_if_not_hex "$2"
187                 echo $2 > $FAULTATTR/reject-en    187                 echo $2 > $FAULTATTR/reject-end
188                 shift 2                           188                 shift 2
189                 ;;                                189                 ;;
190         --oom-kill-allocating-task)               190         --oom-kill-allocating-task)
191                 oom_kill_allocating_task=$2       191                 oom_kill_allocating_task=$2
192                 shift 2                           192                 shift 2
193                 ;;                                193                 ;;
194         --ignore-gfp-wait)                        194         --ignore-gfp-wait)
195                 echo $2 > $FAULTATTR/ignore-gf    195                 echo $2 > $FAULTATTR/ignore-gfp-wait
196                 shift 2                           196                 shift 2
197                 ;;                                197                 ;;
198         --cache-filter)                           198         --cache-filter)
199                 echo $2 > $FAULTATTR/cache_fil    199                 echo $2 > $FAULTATTR/cache_filter
200                 shift 2                           200                 shift 2
201                 ;;                                201                 ;;
202         --ignore-gfp-highmem)                     202         --ignore-gfp-highmem)
203                 echo $2 > $FAULTATTR/ignore-gf    203                 echo $2 > $FAULTATTR/ignore-gfp-highmem
204                 shift 2                           204                 shift 2
205                 ;;                                205                 ;;
206         --min-order)                              206         --min-order)
207                 echo $2 > $FAULTATTR/min-order    207                 echo $2 > $FAULTATTR/min-order
208                 shift 2                           208                 shift 2
209                 ;;                                209                 ;;
210         -h|--help)                                210         -h|--help)
211                 usage                             211                 usage
212                 exit 0                            212                 exit 0
213                 shift                             213                 shift
214                 ;;                                214                 ;;
215         --)                                       215         --)
216                 shift                             216                 shift
217                 break                             217                 break
218                 ;;                                218                 ;;
219         esac                                      219         esac
220 done                                              220 done
221                                                   221 
222 [ -z "$1" ] && exit 0                             222 [ -z "$1" ] && exit 0
223                                                   223 
224 echo $oom_kill_allocating_task > /proc/sys/vm/    224 echo $oom_kill_allocating_task > /proc/sys/vm/oom_kill_allocating_task
225 echo $task_filter > $FAULTATTR/task-filter        225 echo $task_filter > $FAULTATTR/task-filter
226 echo $probability > $FAULTATTR/probability        226 echo $probability > $FAULTATTR/probability
227 echo $times > $FAULTATTR/times                    227 echo $times > $FAULTATTR/times
228                                                   228 
229 trap "restore_values" SIGINT SIGTERM EXIT         229 trap "restore_values" SIGINT SIGTERM EXIT
230                                                   230 
231 cmd="echo 1 > /proc/self/make-it-fail && exec     231 cmd="echo 1 > /proc/self/make-it-fail && exec $@"
232 bash -c "$cmd"                                    232 bash -c "$cmd"
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php