aboutsummaryrefslogtreecommitdiff
path: root/Documentation/block/error-injection.rst
blob: 81f31af82e65db5d61405aab8f6d85ff2189ea91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
.. SPDX-License-Identifier: GPL-2.0

============================
Configurable Error Injection
============================

Overview
--------

Configurable error injection allows injecting specific block layer status codes
for sector ranges of a block device.  Errors can be injected unconditionally, or
with a given probability.

To use configurable error injection, CONFIG_BLK_ERROR_INJECTION must be enabled.

The only interface is the error_injection debugfs file, which is created for
each registered gendisk.  Writes to this file are used to create or delete rules
and reads return a list of the current error injection sites.

Options
-------

The following options specify the operations:

===================	=======================================================
add			add a new rule
removeall		remove all existing rules
===================	=======================================================

The following options specify the details of the rule for the add operation:

===================	=======================================================
op=<string>		block layer operation this rule applies to.  This uses
			the XYZ for each REQ_OP_XYZ operation, e.g. READ, WRITE
			or DISCARD. Mandatory.
status=<string>		Status to return.  This uses XYZ for each BLK_STS_XYZ
			code, e.g. IOERR or MEDIUM. Mandatory.
start=<number>		First block layer sector the rule applies to.
			Optional, defaults to 0.
nr_sectors=<number>	Number of sectors this rule applies.
			Optional, defaults to the remainder of the device.
chance=<number>		Only return a failure with a likelihood of 1/chance.
			Optional, defaults to 1 (always).
===================	=======================================================

Example
-------

Return BLK_STS_IOERR for one in 10 reads of sector 0 of /dev/nvme0n1:

	$ echo 'add,op=READ,start=0,status=IOERR,chance=10' > /sys/kernel/debug/block/nvme0n1/error_injection

Return BLK_STS_MEDIUM for every write to /dev/nvme0n1:

	$ echo 'add,op=WRITE,start=0,status=MEDIUM' > /sys/kernel/debug/block/nvme0n1/error_injection

Remove all rules for /dev/nvme0n1:

	$ echo 'removeall' > /sys/kernel/debug/block/nvme0n1/error_injection