error-injection: Support fault injection framework
Support in-kernel fault-injection framework via debugfs. This allows you to inject a conditional error to specified function using debugfs interfaces. Here is the result of test script described in Documentation/fault-injection/fault-injection.txt =========== # ./test_fail_function.sh 1+0 records in 1+0 records out 1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0227404 s, 46.1 MB/s btrfs-progs v4.4 See http://btrfs.wiki.kernel.org for more information. Label: (null) UUID: bfa96010-12e9-4360-aed0-42eec7af5798 Node size: 16384 Sector size: 4096 Filesystem size: 1001.00MiB Block group profiles: Data: single 8.00MiB Metadata: DUP 58.00MiB System: DUP 12.00MiB SSD detected: no Incompat features: extref, skinny-metadata Number of devices: 1 Devices: ID SIZE PATH 1 1001.00MiB /dev/loop2 mount: mount /dev/loop2 on /opt/tmpmnt failed: Cannot allocate memory SUCCESS! =========== Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Reviewed-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:

committed by
Alexei Starovoitov

parent
663faf9f7b
commit
4b1a29a7f5
@@ -30,6 +30,12 @@ o fail_mmc_request
|
||||
injects MMC data errors on devices permitted by setting
|
||||
debugfs entries under /sys/kernel/debug/mmc0/fail_mmc_request
|
||||
|
||||
o fail_function
|
||||
|
||||
injects error return on specific functions, which are marked by
|
||||
ALLOW_ERROR_INJECTION() macro, by setting debugfs entries
|
||||
under /sys/kernel/debug/fail_function. No boot option supported.
|
||||
|
||||
Configure fault-injection capabilities behavior
|
||||
-----------------------------------------------
|
||||
|
||||
@@ -123,6 +129,29 @@ configuration of fault-injection capabilities.
|
||||
default is 'N', setting it to 'Y' will disable failure injections
|
||||
when dealing with private (address space) futexes.
|
||||
|
||||
- /sys/kernel/debug/fail_function/inject:
|
||||
|
||||
Format: { 'function-name' | '!function-name' | '' }
|
||||
specifies the target function of error injection by name.
|
||||
If the function name leads '!' prefix, given function is
|
||||
removed from injection list. If nothing specified ('')
|
||||
injection list is cleared.
|
||||
|
||||
- /sys/kernel/debug/fail_function/injectable:
|
||||
|
||||
(read only) shows error injectable functions and what type of
|
||||
error values can be specified. The error type will be one of
|
||||
below;
|
||||
- NULL: retval must be 0.
|
||||
- ERRNO: retval must be -1 to -MAX_ERRNO (-4096).
|
||||
- ERR_NULL: retval must be 0 or -1 to -MAX_ERRNO (-4096).
|
||||
|
||||
- /sys/kernel/debug/fail_function/<functiuon-name>/retval:
|
||||
|
||||
specifies the "error" return value to inject to the given
|
||||
function for given function. This will be created when
|
||||
user specifies new injection entry.
|
||||
|
||||
o Boot option
|
||||
|
||||
In order to inject faults while debugfs is not available (early boot time),
|
||||
@@ -268,6 +297,45 @@ trap "echo 0 > /sys/kernel/debug/$FAILTYPE/probability" SIGINT SIGTERM EXIT
|
||||
echo "Injecting errors into the module $module... (interrupt to stop)"
|
||||
sleep 1000000
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
o Inject open_ctree error while btrfs mount
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
rm -f testfile.img
|
||||
dd if=/dev/zero of=testfile.img bs=1M seek=1000 count=1
|
||||
DEVICE=$(losetup --show -f testfile.img)
|
||||
mkfs.btrfs -f $DEVICE
|
||||
mkdir -p tmpmnt
|
||||
|
||||
FAILTYPE=fail_function
|
||||
FAILFUNC=open_ctree
|
||||
echo $FAILFUNC > /sys/kernel/debug/$FAILTYPE/inject
|
||||
echo -12 > /sys/kernel/debug/$FAILTYPE/$FAILFUNC/retval
|
||||
echo N > /sys/kernel/debug/$FAILTYPE/task-filter
|
||||
echo 100 > /sys/kernel/debug/$FAILTYPE/probability
|
||||
echo 0 > /sys/kernel/debug/$FAILTYPE/interval
|
||||
echo -1 > /sys/kernel/debug/$FAILTYPE/times
|
||||
echo 0 > /sys/kernel/debug/$FAILTYPE/space
|
||||
echo 1 > /sys/kernel/debug/$FAILTYPE/verbose
|
||||
|
||||
mount -t btrfs $DEVICE tmpmnt
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "SUCCESS!"
|
||||
else
|
||||
echo "FAILED!"
|
||||
umount tmpmnt
|
||||
fi
|
||||
|
||||
echo > /sys/kernel/debug/$FAILTYPE/inject
|
||||
|
||||
rmdir tmpmnt
|
||||
losetup -d $DEVICE
|
||||
rm testfile.img
|
||||
|
||||
|
||||
Tool to run command with failslab or fail_page_alloc
|
||||
----------------------------------------------------
|
||||
In order to make it easier to accomplish the tasks mentioned above, we can use
|
||||
|
Reference in New Issue
Block a user