diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2007-07-16 02:40:24 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-16 12:05:45 -0400 |
commit | 185848707e73382ba930857502a0b80ff6039967 (patch) | |
tree | 21a4a84ff46b1af4b0a139b3da94c705b6826b89 /Documentation/fault-injection/fault-injection.txt | |
parent | 54114994f4de7e8076fc250e44501e55e19b75b5 (diff) |
fault-injection: fix example scripts in documentation
Fix and cleanup example scripts in fault injection documentation.
1. Eliminate broken oops() shell function.
2. Fold failcmd.sh and failmodule.sh into example scripts. It makes
the example scripts work independent of current working directory.
3. Set "space" parameter to 0 to start injecting errors immediately.
4. Use /sys/module/<modulename>/sections/.data as upper bound of
.text section. Because some module doesn't have .exit.text section.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/fault-injection/fault-injection.txt')
-rw-r--r-- | Documentation/fault-injection/fault-injection.txt | 105 |
1 files changed, 56 insertions, 49 deletions
diff --git a/Documentation/fault-injection/fault-injection.txt b/Documentation/fault-injection/fault-injection.txt index 36ece095ff17..4bc374a14345 100644 --- a/Documentation/fault-injection/fault-injection.txt +++ b/Documentation/fault-injection/fault-injection.txt | |||
@@ -161,70 +161,77 @@ o add a hook to insert failures | |||
161 | Application Examples | 161 | Application Examples |
162 | -------------------- | 162 | -------------------- |
163 | 163 | ||
164 | o inject slab allocation failures into module init/cleanup code | 164 | o Inject slab allocation failures into module init/exit code |
165 | 165 | ||
166 | ------------------------------------------------------------------------------ | ||
167 | #!/bin/bash | 166 | #!/bin/bash |
168 | 167 | ||
169 | FAILCMD=Documentation/fault-injection/failcmd.sh | 168 | FAILTYPE=failslab |
170 | BLACKLIST="root_plug evbug" | 169 | echo Y > /debug/$FAILTYPE/task-filter |
171 | 170 | echo 10 > /debug/$FAILTYPE/probability | |
172 | FAILNAME=failslab | 171 | echo 100 > /debug/$FAILTYPE/interval |
173 | echo Y > /debug/$FAILNAME/task-filter | 172 | echo -1 > /debug/$FAILTYPE/times |
174 | echo 10 > /debug/$FAILNAME/probability | 173 | echo 0 > /debug/$FAILTYPE/space |
175 | echo 100 > /debug/$FAILNAME/interval | 174 | echo 2 > /debug/$FAILTYPE/verbose |
176 | echo -1 > /debug/$FAILNAME/times | 175 | echo 1 > /debug/$FAILTYPE/ignore-gfp-wait |
177 | echo 2 > /debug/$FAILNAME/verbose | ||
178 | echo 1 > /debug/$FAILNAME/ignore-gfp-wait | ||
179 | 176 | ||
180 | blacklist() | 177 | faulty_system() |
181 | { | 178 | { |
182 | echo $BLACKLIST | grep $1 > /dev/null 2>&1 | 179 | bash -c "echo 1 > /proc/self/make-it-fail && exec $*" |
183 | } | 180 | } |
184 | 181 | ||
185 | oops() | 182 | if [ $# -eq 0 ] |
186 | { | 183 | then |
187 | dmesg | grep BUG > /dev/null 2>&1 | 184 | echo "Usage: $0 modulename [ modulename ... ]" |
188 | } | 185 | exit 1 |
186 | fi | ||
187 | |||
188 | for m in $* | ||
189 | do | ||
190 | echo inserting $m... | ||
191 | faulty_system modprobe $m | ||
189 | 192 | ||
190 | find /lib/modules/`uname -r` -name '*.ko' -exec basename {} .ko \; | | 193 | echo removing $m... |
191 | while read i | 194 | faulty_system modprobe -r $m |
192 | do | 195 | done |
193 | oops && exit 1 | ||
194 | |||
195 | if ! blacklist $i | ||
196 | then | ||
197 | echo inserting $i... | ||
198 | bash $FAILCMD modprobe $i | ||
199 | fi | ||
200 | done | ||
201 | |||
202 | lsmod | awk '{ if ($3 == 0) { print $1 } }' | | ||
203 | while read i | ||
204 | do | ||
205 | oops && exit 1 | ||
206 | |||
207 | if ! blacklist $i | ||
208 | then | ||
209 | echo removing $i... | ||
210 | bash $FAILCMD modprobe -r $i | ||
211 | fi | ||
212 | done | ||
213 | 196 | ||
214 | ------------------------------------------------------------------------------ | 197 | ------------------------------------------------------------------------------ |
215 | 198 | ||
216 | o inject slab allocation failures only for a specific module | 199 | o Inject page allocation failures only for a specific module |
217 | 200 | ||
218 | ------------------------------------------------------------------------------ | ||
219 | #!/bin/bash | 201 | #!/bin/bash |
220 | 202 | ||
221 | FAILMOD=Documentation/fault-injection/failmodule.sh | 203 | FAILTYPE=fail_page_alloc |
204 | module=$1 | ||
222 | 205 | ||
223 | echo injecting errors into the module $1... | 206 | if [ -z $module ] |
207 | then | ||
208 | echo "Usage: $0 <modulename>" | ||
209 | exit 1 | ||
210 | fi | ||
224 | 211 | ||
225 | modprobe $1 | 212 | modprobe $module |
226 | bash $FAILMOD failslab $1 10 | ||
227 | echo 25 > /debug/failslab/probability | ||
228 | 213 | ||
229 | ------------------------------------------------------------------------------ | 214 | if [ ! -d /sys/module/$module/sections ] |
215 | then | ||
216 | echo Module $module is not loaded | ||
217 | exit 1 | ||
218 | fi | ||
219 | |||
220 | cat /sys/module/$module/sections/.text > /debug/$FAILTYPE/require-start | ||
221 | cat /sys/module/$module/sections/.data > /debug/$FAILTYPE/require-end | ||
222 | |||
223 | echo N > /debug/$FAILTYPE/task-filter | ||
224 | echo 10 > /debug/$FAILTYPE/probability | ||
225 | echo 100 > /debug/$FAILTYPE/interval | ||
226 | echo -1 > /debug/$FAILTYPE/times | ||
227 | echo 0 > /debug/$FAILTYPE/space | ||
228 | echo 2 > /debug/$FAILTYPE/verbose | ||
229 | echo 1 > /debug/$FAILTYPE/ignore-gfp-wait | ||
230 | echo 1 > /debug/$FAILTYPE/ignore-gfp-highmem | ||
231 | echo 10 > /debug/$FAILTYPE/stacktrace-depth | ||
232 | |||
233 | trap "echo 0 > /debug/$FAILTYPE/probability" SIGINT SIGTERM EXIT | ||
234 | |||
235 | echo "Injecting errors into the module $module... (interrupt to stop)" | ||
236 | sleep 1000000 | ||
230 | 237 | ||