From 89bdb5dd5326299d6b16680438e8cb3fe1ea4afc Mon Sep 17 00:00:00 2001 From: Ming Lei Date: Sun, 7 Apr 2024 20:57:17 +0800 Subject: [PATCH] block/037: add test to cover blk-cgroup vs. disk rebind Recently it is observed that list corruption is triggered when running scsi disk rebind in case of blk-cgroup. Add one such test case for covering this unusual operation. Cc: Changhui Zhong Signed-off-by: Ming Lei [Shin'ichiro: changed the test case number from block/035 to block/037] [Shin'ichiro: removed the _have_fio call and improved test description] Signed-off-by: Shin'ichiro Kawasaki --- tests/block/037 | 54 +++++++++++++++++++++++++++++++++++++++++++++ tests/block/037.out | 2 ++ 2 files changed, 56 insertions(+) create mode 100755 tests/block/037 create mode 100644 tests/block/037.out diff --git a/tests/block/037 b/tests/block/037 new file mode 100755 index 00000000..6ecbe373 --- /dev/null +++ b/tests/block/037 @@ -0,0 +1,54 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2024 Ming Lei +# +# blk-cgroup is usually initialized in disk allocation code, and +# de-initialized in disk release code. And scsi disk rebind needs +# to re-allocate/re-add disk, meantime request queue is kept as +# live during the whole cycle. +# +# Add this test for covering blk-cgroup & disk rebind. It confirms the kernel +# fix 8b8ace080319 ("block: fix q->blkg_list corruption during disk rebind"). + +. tests/block/rc +. common/scsi_debug +. common/cgroup + +DESCRIPTION="test cgroup vs. scsi_debug rebind" +QUICK=1 + +requires() { + _have_cgroup2_controller io + _have_scsi_debug +} + +scsi_debug_rebind() { + if ! _configure_scsi_debug; then + return + fi + + _init_cgroup2 + + echo "+io" > "/sys/fs/cgroup/cgroup.subtree_control" + echo "+io" > "$CGROUP2_DIR/cgroup.subtree_control" + mkdir -p "$CGROUP2_DIR/${TEST_NAME}" + + local dev dev_path hctl + dev=${SCSI_DEBUG_DEVICES[0]} + dev_path="$(realpath "/sys/block/${dev}/device")" + hctl="$(basename "$dev_path")" + + echo -n "${hctl}" > "/sys/bus/scsi/drivers/sd/unbind" + echo -n "${hctl}" > "/sys/bus/scsi/drivers/sd/bind" + + _exit_cgroup2 + _exit_scsi_debug +} + +test() { + echo "Running ${TEST_NAME}" + + scsi_debug_rebind + + echo "Test complete" +} diff --git a/tests/block/037.out b/tests/block/037.out new file mode 100644 index 00000000..dd0ca0bc --- /dev/null +++ b/tests/block/037.out @@ -0,0 +1,2 @@ +Running block/037 +Test complete