From a668c61064f2b08f895338562fbc2f2e2849d052 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sat, 28 Mar 2020 11:22:51 -0700 Subject: [PATCH] Add a test that triggers the blk_mq_realloc_hw_ctxs() error path Add a test that triggers the code touched by commit d0930bb8f46b ("blk-mq: Fix a recently introduced regression in blk_mq_realloc_hw_ctxs()"). This test only runs if a recently added fault injection feature is available, namely commit 596444e75705 ("null_blk: Add support for init_hctx() fault injection"). Cc: Ming Lei Reviewed-by: Chaitanya Kulkarni Signed-off-by: Bart Van Assche --- tests/block/030 | 53 +++++++++++++++++++++++++++++++++++++++++++++ tests/block/030.out | 1 + 2 files changed, 54 insertions(+) create mode 100755 tests/block/030 create mode 100644 tests/block/030.out diff --git a/tests/block/030 b/tests/block/030 new file mode 100755 index 0000000..84302c1 --- /dev/null +++ b/tests/block/030 @@ -0,0 +1,53 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright 2020 Google LLC +# +# Trigger the blk_mq_realloc_hw_ctxs() error path. Regression test for commit +# d0930bb8f46b ("blk-mq: Fix a recently introduced regression in +# blk_mq_realloc_hw_ctxs()"). + +. tests/block/rc +. common/null_blk + +DESCRIPTION="trigger the blk_mq_realloc_hw_ctxs() error path" +QUICK=1 + +requires() { + _have_null_blk && _have_module_param null_blk init_hctx +} + +test() { + local i sq=/sys/kernel/config/nullb/nullb0/submit_queues + + : "${TIMEOUT:=30}" + # Legend: init_hctx=,,, + # Set to $(nproc) + 1 to make loading of null_blk succeed. + if ! _init_null_blk nr_devices=0 queue_mode=2 \ + "init_hctx=$(nproc),100,$(($(nproc) + 1)),-1"; then + echo "Loading null_blk failed" + return 1 + fi + if ! _configure_null_blk nullb0 completion_nsec=0 blocksize=512 size=16\ + submit_queues="$(nproc)" memory_backed=1 power=1; then + echo "Configuring null_blk failed" + return 1 + fi + # Since older null_blk versions do not allow "submit_queues" to be + # modified, check first whether that configs attribute is writeable. + # Each iteration of the loop below triggers $(nproc) + 1 + # null_init_hctx() calls. Since =$(nproc), all possible + # blk_mq_realloc_hw_ctxs() error paths will be triggered. Whether or + # not this test succeeds depends on whether or not _check_dmesg() + # detects a kernel warning. + if { echo "$(<"$sq")" >$sq; } 2>/dev/null; then + for ((i = 0; i < 100; i++)); do + echo 1 > $sq + nproc > $sq + done + else + SKIP_REASON="Skipping test because $sq cannot be modified" + fi + rmdir /sys/kernel/config/nullb/nullb0 + _exit_null_blk + echo Passed +} diff --git a/tests/block/030.out b/tests/block/030.out new file mode 100644 index 0000000..863339f --- /dev/null +++ b/tests/block/030.out @@ -0,0 +1 @@ +Passed -- 2.49.0