linux-block.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] blktests: block/022: Add tests to verify read-only state transitions
@ 2019-05-29 17:36 Martin K. Petersen
  0 siblings, 0 replies; only message in thread
From: Martin K. Petersen @ 2019-05-29 17:36 UTC (permalink / raw)
  To: linux-block; +Cc: Martin K. Petersen

We have had several regressions wrt. read-only device handling. This
is mainly caused by the fact that the device ro state can be set both
by the user as well as the device.

Add a series of tests that verify that all the intersections of user
policy vs. device state changes are handled correctly in the block
layer.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
---
 tests/block/022     | 92 +++++++++++++++++++++++++++++++++++++++++++++
 tests/block/022.out | 22 +++++++++++
 2 files changed, 114 insertions(+)
 create mode 100755 tests/block/022
 create mode 100644 tests/block/022.out

diff --git a/tests/block/022 b/tests/block/022
new file mode 100755
index 000000000000..56451e3355d8
--- /dev/null
+++ b/tests/block/022
@@ -0,0 +1,92 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2019 Martin K. Petersen <martin.petersen@oracle.com>
+#
+# Test that device read-only state transitions are handled correctly.
+
+. tests/block/rc
+. common/scsi_debug
+
+DESCRIPTION="test that device read-only state transitions are handled correctly"
+
+requires() {
+	_have_scsi_debug
+}
+
+get_ro() {
+	local sys="/sys/block/${SCSI_DEBUG_DEVICES[0]}"
+	local ROSTATE=()
+
+	for part in "${sys}"/ro "${sys}"/*/ro; do
+		ROSTATE+=("$(cat "${part}")")
+	done
+
+	echo "${ROSTATE[*]}"
+}
+
+test() {
+	echo "Running ${TEST_NAME}"
+
+	if ! _init_scsi_debug dev_size_mb=128 num_parts=3; then
+		return 1
+	fi
+
+	local dev="/dev/${SCSI_DEBUG_DEVICES[0]}"
+	local sys="/sys/block/${SCSI_DEBUG_DEVICES[0]}"
+	local wp="/sys/module/scsi_debug/parameters/wp"
+
+	echo "Verify that device comes up read-write"
+	get_ro
+
+	echo "Verify that setting partition 2 read-only works"
+	blockdev --setro "${dev}2"
+	get_ro
+
+	echo "Verify that setting whole disk read-only works"
+	blockdev --setro "${dev}"
+	get_ro
+
+	echo "Verify that device revalidate works for whole disk policy"
+	echo 1 > "${sys}/device/rescan"
+	get_ro
+
+	echo "Verify that setting whole disk device back to read-write works"
+	blockdev --setrw "${dev}"
+	get_ro
+
+	echo "Verify that device revalidate works for partition policy"
+	echo 1 > "${sys}/device/rescan"
+	get_ro
+
+	echo "Verify setting hardware device read-only"
+	if [[ -f "${wp}" ]]; then
+		echo 1 > "${wp}"
+		echo 1 > "${sys}/device/rescan"
+		get_ro
+	else
+		echo "1:1:1:1"
+	fi
+
+	echo "Verify setting hardware device read-write"
+	if [[ -f "${wp}" ]]; then
+		echo 0 > "${wp}"
+		echo 1 > "${sys}/device/rescan"
+		get_ro
+	else
+		echo "0:0:1:0"
+	fi
+
+	echo "Verify that partition read-only policy is lost after BLKRRPART"
+	blockdev --setro "${dev}2"
+	blockdev --rereadpt "${dev}"
+	get_ro
+
+	echo "Verify that whole disk read-only policy persists after BLKRRPART"
+	blockdev --setro "${dev}"
+	blockdev --rereadpt "${dev}"
+	get_ro
+
+	_exit_scsi_debug
+
+	echo "Test complete"
+}
diff --git a/tests/block/022.out b/tests/block/022.out
new file mode 100644
index 000000000000..c89d6d81903d
--- /dev/null
+++ b/tests/block/022.out
@@ -0,0 +1,22 @@
+Running block/022
+Verify that device comes up read-write
+0 0 0 0
+Verify that setting partition 2 read-only works
+0 0 1 0
+Verify that setting whole disk read-only works
+1 1 1 1
+Verify that device revalidate works for whole disk policy
+1 1 1 1
+Verify that setting whole disk device back to read-write works
+0 0 1 0
+Verify that device revalidate works for partition policy
+0 0 1 0
+Verify setting hardware device read-only
+1 1 1 1
+Verify setting hardware device read-write
+0 0 1 0
+Verify that partition read-only policy is lost after BLKRRPART
+0 0 0 0
+Verify that whole disk read-only policy persists after BLKRRPART
+1 1 1 1
+Test complete
-- 
2.21.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-05-29 17:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-29 17:36 [PATCH] blktests: block/022: Add tests to verify read-only state transitions Martin K. Petersen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).