Commit 18584870 authored by Akinobu Mita's avatar Akinobu Mita Committed by Linus Torvalds

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: default avatarAkinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 54114994
#!/bin/bash
echo 1 > /proc/self/make-it-fail
exec $*
#!/bin/bash
#
# Usage: failmodule <failname> <modulename> [stacktrace-depth]
#
# <failname>: "failslab", "fail_alloc_page", or "fail_make_request"
#
# <modulename>: module name that you want to inject faults.
#
# [stacktrace-depth]: the maximum number of stacktrace walking allowed
#
STACKTRACE_DEPTH=5
if [ $# -gt 2 ]; then
STACKTRACE_DEPTH=$3
fi
if [ ! -d /debug/$1 ]; then
echo "Fault-injection $1 does not exist" >&2
exit 1
fi
if [ ! -d /sys/module/$2 ]; then
echo "Module $2 does not exist" >&2
exit 1
fi
# Disable any fault injection
echo 0 > /debug/$1/stacktrace-depth
echo `cat /sys/module/$2/sections/.text` > /debug/$1/require-start
echo `cat /sys/module/$2/sections/.exit.text` > /debug/$1/require-end
echo $STACKTRACE_DEPTH > /debug/$1/stacktrace-depth
...@@ -161,70 +161,77 @@ o add a hook to insert failures ...@@ -161,70 +161,77 @@ o add a hook to insert failures
Application Examples Application Examples
-------------------- --------------------
o inject slab allocation failures into module init/cleanup code o Inject slab allocation failures into module init/exit code
------------------------------------------------------------------------------
#!/bin/bash #!/bin/bash
FAILCMD=Documentation/fault-injection/failcmd.sh FAILTYPE=failslab
BLACKLIST="root_plug evbug" echo Y > /debug/$FAILTYPE/task-filter
echo 10 > /debug/$FAILTYPE/probability
FAILNAME=failslab echo 100 > /debug/$FAILTYPE/interval
echo Y > /debug/$FAILNAME/task-filter echo -1 > /debug/$FAILTYPE/times
echo 10 > /debug/$FAILNAME/probability echo 0 > /debug/$FAILTYPE/space
echo 100 > /debug/$FAILNAME/interval echo 2 > /debug/$FAILTYPE/verbose
echo -1 > /debug/$FAILNAME/times echo 1 > /debug/$FAILTYPE/ignore-gfp-wait
echo 2 > /debug/$FAILNAME/verbose
echo 1 > /debug/$FAILNAME/ignore-gfp-wait
blacklist() faulty_system()
{ {
echo $BLACKLIST | grep $1 > /dev/null 2>&1 bash -c "echo 1 > /proc/self/make-it-fail && exec $*"
} }
oops() if [ $# -eq 0 ]
{ then
dmesg | grep BUG > /dev/null 2>&1 echo "Usage: $0 modulename [ modulename ... ]"
} exit 1
fi
for m in $*
do
echo inserting $m...
faulty_system modprobe $m
find /lib/modules/`uname -r` -name '*.ko' -exec basename {} .ko \; | echo removing $m...
while read i faulty_system modprobe -r $m
do done
oops && exit 1
if ! blacklist $i
then
echo inserting $i...
bash $FAILCMD modprobe $i
fi
done
lsmod | awk '{ if ($3 == 0) { print $1 } }' |
while read i
do
oops && exit 1
if ! blacklist $i
then
echo removing $i...
bash $FAILCMD modprobe -r $i
fi
done
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
o inject slab allocation failures only for a specific module o Inject page allocation failures only for a specific module
------------------------------------------------------------------------------
#!/bin/bash #!/bin/bash
FAILMOD=Documentation/fault-injection/failmodule.sh FAILTYPE=fail_page_alloc
module=$1
echo injecting errors into the module $1... if [ -z $module ]
then
echo "Usage: $0 <modulename>"
exit 1
fi
modprobe $1 modprobe $module
bash $FAILMOD failslab $1 10
echo 25 > /debug/failslab/probability
------------------------------------------------------------------------------ if [ ! -d /sys/module/$module/sections ]
then
echo Module $module is not loaded
exit 1
fi
cat /sys/module/$module/sections/.text > /debug/$FAILTYPE/require-start
cat /sys/module/$module/sections/.data > /debug/$FAILTYPE/require-end
echo N > /debug/$FAILTYPE/task-filter
echo 10 > /debug/$FAILTYPE/probability
echo 100 > /debug/$FAILTYPE/interval
echo -1 > /debug/$FAILTYPE/times
echo 0 > /debug/$FAILTYPE/space
echo 2 > /debug/$FAILTYPE/verbose
echo 1 > /debug/$FAILTYPE/ignore-gfp-wait
echo 1 > /debug/$FAILTYPE/ignore-gfp-highmem
echo 10 > /debug/$FAILTYPE/stacktrace-depth
trap "echo 0 > /debug/$FAILTYPE/probability" SIGINT SIGTERM EXIT
echo "Injecting errors into the module $module... (interrupt to stop)"
sleep 1000000
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment