Add test case from Stephen Zhang [1]. [1] https://lore.kernel.org/linux-bcache/CANubcdX7eNbH_bo4-f94DUbdiEbt04Vxy1MPyhm+CZyXB01FuQ@mail.gmail.com/ Signed-off-by: Daniel Wagner --- tests/bcache/002 | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/bcache/002.out | 2 ++ 2 files changed, 65 insertions(+) diff --git a/tests/bcache/002 b/tests/bcache/002 new file mode 100644 index 000000000000..04892667ad1b --- /dev/null +++ b/tests/bcache/002 @@ -0,0 +1,63 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2026 Daniel Wagner, SUSE Labs +# +# Test based on Stephen Zhang test case +# https://lore.kernel.org/linux-bcache/CANubcdX7eNbH_bo4-f94DUbdiEbt04Vxy1MPyhm+CZyXB01FuQ@mail.gmail.com/#t +# +# Test bcache for bio leaks in clone + +. tests/bcache/rc + +DESCRIPTION="test bcache for bio leaks in clone" + +requires() { + _bcache_requires + _have_fio + _have_program iostat +} + +test_device_array() { + echo "Running ${TEST_NAME}" + + if [[ ${#TEST_DEV_ARRAY[@]} -lt 2 ]]; then + SKIP_REASONS+=("requires at least 2 devices") + return 1 + fi + + _setup_bcache "${TEST_DEV_ARRAY[@]}" + + local bcache_nodes bcache_dev bdev_name fio_pid + + mapfile -t bcache_nodes < <(_create_bcache \ + --cache "${TEST_DEV_ARRAY[0]##*/}" \ + --bdev "${TEST_DEV_ARRAY[1]##*/}" \ + --writeback) + + bcache_dev="${bcache_nodes[0]}" + bdev_name="$(basename "${bcache_dev}")" + echo 1 > /sys/block/"${bdev_name}"/bcache/detach + + state="$(cat /sys/block/"${bdev_name}"/bcache/state)" + echo "Device state: ${state}" + + _run_fio_rand_io --filename="${bcache_dev}" --time_base \ + --runtime=30 >> "$FULL" 2>&1 & + fio_pid=$! + + sleep 5 + + local stats_line util + stats_line=$(iostat -x 1 2 "${bdev_name}" | grep -w "${bdev_name}" | tail -n 1) + util="$(echo "${stats_line}" | awk '{print $NF}')" + + if (( $(echo "${util} > 1.0" | bc -l) )); then + echo "ERROR: Accounting leak detected!" + fi + + { pkill -f "fio.*${bcache_dev}"; wait "${fio_pid}"; } &> /dev/null + + _remove_bcache --bcache "${bcache_nodes[@]}" \ + --cache "${TEST_DEV_ARRAY[0]##*/}" \ + --bdev "${TEST_DEV_ARRAY[1]##*/}" +} diff --git a/tests/bcache/002.out b/tests/bcache/002.out new file mode 100644 index 000000000000..529c1a90b135 --- /dev/null +++ b/tests/bcache/002.out @@ -0,0 +1,2 @@ +Running bcache/002 +Device state: no cache -- 2.52.0