Re: [PATCH blktests] block/035: test return EIO from BLKRRPART

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



+ CC Shinichiro

On 4/4/2024 6:56 PM, Saranya Muruganandam wrote:
> When we fail to reread the partition superblock from the disk, due to
> bad sector or bad disk etc, BLKRRPART should fail with EIO.
> Simulate failure for the entire block device and run
> "blockdev --rereadpt" and expect it to fail and return EIO instead of
> pass.
> 
> Link: https://lore.kernel.org/all/20240405014253.748627-1-saranyamohan@xxxxxxxxxx/
> Signed-off-by: Saranya Muruganandam <saranyamohan@xxxxxxxxxx>
> ---
>   tests/block/035     | 80 +++++++++++++++++++++++++++++++++++++++++++++
>   tests/block/035.out |  7 ++++
>   2 files changed, 87 insertions(+)
>   create mode 100755 tests/block/035
>   create mode 100644 tests/block/035.out
> 
> diff --git a/tests/block/035 b/tests/block/035
> new file mode 100755
> index 0000000..3b307f1
> --- /dev/null
> +++ b/tests/block/035
> @@ -0,0 +1,80 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-3.0+
> +# Copyright (C) 2024 Saranya Muruganandam
> +#
> +# Regression test for BLKRRPART.
> +#
> +# If we fail to read the partition table due to bad sector or other IO
> +# failures, running "blockdev --rereadpt" should fail and return
> +# -EIO.  On a buggy kernel, it passes unexpectedly.
> +
> +. tests/block/rc
> +
> +DESCRIPTION="test return EIO from BLKRRPART for whole-dev"
> +QUICK=1
> +DEBUGFS_MNT="/sys/kernel/debug"
> +
> +
> +_have_debugfs() {
> +
> +	if [[ ! -d /sys/kernel/debug ]]; then
> +		SKIP_REASONS+=("debugfs does not exist")
> +		return 1
> +	fi
> +	return 0
> +}
> +
> +requires() {
> +	_have_debugfs
> +}
> +
> +
> +allow_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"
> +
> +    echo "Allow global fail_make_request feature"

I don't think we need above print

> +    echo 100 > $DEBUGFS_MNT/fail_make_request/probability
> +    echo 9999999 > $DEBUGFS_MNT/fail_make_request/times
> +    echo 0 >  /sys/kernel/debug/fail_make_request/verbose
> +
> +    echo "Force TEST_DEV device failure"

same here

> +    echo 1 > /sys/block/$(basename ${TEST_DEV})/make-it-fail
> +
> +}
> +
> +disallow_fail_make_request()
> +{
> +    echo "Make TEST_DEV device operatable again"

same here

> +    echo 0 > /sys/block/$(basename ${TEST_DEV})/make-it-fail
> +
> +    echo "Disallow global fail_make_request feature"

same here

> +    echo 0 > $DEBUGFS_MNT/fail_make_request/probability
> +    echo 0 > $DEBUGFS_MNT/fail_make_request/times
> +}
> +
> +
> +test_device() {
> +	echo "Running ${TEST_NAME}"
> +
> +	allow_fail_make_request
> +
> +	# Check rereading partitions on bad disk cannot open /dev/sdc: Input/output error
> +	local out=$(blockdev --rereadpt ${TEST_DEV} 2>&1)
> +	echo $out | grep -q "Input/output error"
> +	if [ $? -eq 0 ]; then
> +		echo "Return EIO for BLKRRPART on bad disk"
> +	else
> +		echo "Did not return EIO for BLKRRPART on bad disk"
> +	fi
> +
> +	echo $out >> "$FULL"
> +	status=$?
> +	
> +	disallow_fail_make_request
> +

instead of disallow fail make request completely, we need to save the
existing configuration before calling allow_fail_make_request and 
restore that saved configuration here, unless there is a specific reason
for not doing that which I didn't understand ..

> +	echo "Test complete"
> +}
> +
> diff --git a/tests/block/035.out b/tests/block/035.out
> new file mode 100644
> index 0000000..3fbfd77
> --- /dev/null
> +++ b/tests/block/035.out
> @@ -0,0 +1,7 @@
> +Running block/035
> +Allow global fail_make_request feature
> +Force TEST_DEV device failure
> +Return EIO for BLKRRPART on bad disk
> +Make TEST_DEV device operatable again
> +Disallow global fail_make_request feature
> +Test complete


I found several shellcheck warnings, please consider fixing those unless
they are kept for a reason (which I didn't understand why), then
consider disabling it with right shellcheck directive with appropriate
comment supporting reason:-

tests/block/035:44:25: warning: Quote this to prevent word splitting. 
[SC2046] 
tests/block/035:44:36: note: Double quote to prevent globbing and word 
splitting. [SC2086] 
tests/block/035:51:25: warning: Quote this to prevent word splitting. 
[SC2046] 
tests/block/035:51:36: note: Double quote to prevent globbing and word 
splitting. [SC2086] 
tests/block/035:65:8: warning: Declare and assign separately to avoid 
masking return values. [SC2155] 
tests/block/035:65:34: note: Double quote to prevent globbing and word 
splitting. [SC2086] 
tests/block/035:66:7: note: Double quote to prevent globbing and word 
splitting. [SC2086] 
tests/block/035:67:7: note: Check exit code directly with e.g. 'if 
mycmd;', not indirectly with $?. [SC2181] 
tests/block/035:73:7: note: Double quote to prevent globbing and word 
splitting. [SC2086] 
tests/block/035:74:2: warning: status appears unused. Verify use (or 
export if used externally). [SC2034]

-ck






[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux