| From: |
| Christoph Hellwig <hch-AT-lst.de> |
| To: |
| Jens Axboe <axboe-AT-kernel.dk> |
| Subject: |
| configurable block error injection |
| Date: |
| Tue, 02 Jun 2026 07:45:32 +0200 |
| Message-ID: |
| <20260602054615.3788425-1-hch@lst.de> |
| Cc: |
| Jonathan Corbet <corbet-AT-lwn.net>, linux-block-AT-vger.kernel.org, linux-doc-AT-vger.kernel.org, bpf-AT-vger.kernel.org, linux-kselftest-AT-vger.kernel.org |
| Archive-link: |
| Article |
Hi all,
this series adds a new configurable block error injection facility.
We already have a few to inject block errors, but unfortunately most
of them are either not very useful or hard to use, or both:
- The fail_make_request failure injection point can't distinguish
different commands, different ranges in the file and can only injection
plain I/O errors.
- the should_fail_bio 'dynamic' failure injection has all the same issues
as fail_make_request
- dm-error can only fail all command in the table using BLK_STS_IOERR
and requires setting up a new block device
- dm-flakey and dm-dust allow all kinds of configurability, but still
don't have good error selection, no good support for non-read/write
commands and are limited to the dm table alignment requirements,
which for zoned devices enforces setting them up for an entire zone.
They also once again require setting up a stacked block device,
which is really annoying in harnesses like xfstests
This series adds a new debugfs-based block layer error injection
that allows to configure what operations and ranges the injection
applied to, and what status to return. It also allows to configure a
failure ratio similar to the xfs errortag injection.
As part of this the should_fail_bio is removed, as the should_fail_bio
function really gets in the way in it's current form, and the injection
of an errno which always gets turned into BLK_STS_IOERR doesn't make
much sense. This required adjusting the bpf test suite as it attached
to this function as it assumed it to be present.
Diffstat:
Documentation/block/error-injection.rst | 59 ++
Documentation/block/index.rst | 1
block/Kconfig | 6
block/Makefile | 1
block/blk-core.c | 128 ++---
block/blk-merge.c | 5
block/blk-mq.c | 3
block/blk-sysfs.c | 4
block/blk.h | 24
block/error-injection.c | 329 +++++++++++++
block/genhd.c | 4
include/linux/blk_types.h | 2
include/linux/blkdev.h | 5
lib/Kconfig.debug | 6
tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c | 7
15 files changed, 507 insertions(+), 77 deletions(-)