| ##/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # |
| # common functions for setting up and tearing down block device error injection |
| |
| _require_fail_make_request() |
| { |
| [ -f "$DEBUGFS_MNT/fail_make_request/probability" ] \ |
| || _notrun "$DEBUGFS_MNT/fail_make_request \ |
| not found. Seems that CONFIG_FAIL_MAKE_REQUEST kernel config option not enabled" |
| } |
| |
| _allow_fail_make_request() |
| { |
| local prob="${1:-100}" |
| local times="${2:-9999999}" |
| local verbose="${3:-0}" |
| |
| echo "Allow global fail_make_request feature" |
| echo "$prob" > $DEBUGFS_MNT/fail_make_request/probability |
| echo "$times" > $DEBUGFS_MNT/fail_make_request/times |
| echo "$verbose" > $DEBUGFS_MNT/fail_make_request/verbose |
| } |
| |
| _disallow_fail_make_request() |
| { |
| echo "Disallow global fail_make_request feature" |
| echo 0 > $DEBUGFS_MNT/fail_make_request/probability |
| echo 0 > $DEBUGFS_MNT/fail_make_request/times |
| echo 0 > $DEBUGFS_MNT/fail_make_request/verbose |
| } |
| |
| _bdev_fail_make_request() |
| { |
| local bdev="$1" |
| local status="$2" |
| local sysfs_bdev=$(_sysfs_dev $bdev) |
| |
| echo " echo $status > $sysfs_bdev/make-it-fail" >> $seqres.full |
| echo "$status" > $sysfs_bdev/make-it-fail |
| } |
| |
| _start_fail_scratch_dev() |
| { |
| echo "Force SCRATCH_DEV device failure" |
| |
| _prepare_for_eio_shutdown $SCRATCH_DEV |
| _bdev_fail_make_request $SCRATCH_DEV 1 |
| [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \ |
| _bdev_fail_make_request $SCRATCH_LOGDEV 1 |
| [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \ |
| _bdev_fail_make_request $SCRATCH_RTDEV 1 |
| } |
| |
| _stop_fail_scratch_dev() |
| { |
| echo "Make SCRATCH_DEV device operable again" |
| |
| [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \ |
| _bdev_fail_make_request $SCRATCH_RTDEV 0 |
| [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \ |
| _bdev_fail_make_request $SCRATCH_LOGDEV 0 |
| _bdev_fail_make_request $SCRATCH_DEV 0 |
| } |