Support for sharing a tag set across hardware queues has been added recently to the Linux kernel. See also the BLK_MQ_F_TAG_HCTX_SHARED flag, Linux kernel commit 32bc15afed04 ("blk-mq: Facilitate a shared sbitmap per tagset"; v5.10) and commit 0905053bdb5b ("null_blk: Support shared tag bitmap"; v5.10). Add a test that triggers the shared tag set code in the block layer core. Cc: John Garry <john.garry@xxxxxxxxxx> Cc: Don Brace<don.brace@xxxxxxxxxxxxx> Cc: Douglas Gilbert <dgilbert@xxxxxxxxxxxx> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> --- tests/block/031 | 43 +++++++++++++++++++++++++++++++++++++++++++ tests/block/031.out | 1 + 2 files changed, 44 insertions(+) create mode 100755 tests/block/031 create mode 100644 tests/block/031.out diff --git a/tests/block/031 b/tests/block/031 new file mode 100755 index 000000000000..7940f9fa1114 --- /dev/null +++ b/tests/block/031 @@ -0,0 +1,43 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright 2021 Google LLC +# +# Test support for sharing a tag set across hardware queues ("host tag set"). + +. tests/block/rc +. common/null_blk + +DESCRIPTION="test host tagset support" +TIMED=1 + +requires() { + _have_null_blk && _have_module_param null_blk shared_tag_bitmap +} + +test() { + local fio_status bs=512 + + : "${TIMEOUT:=30}" + if ! _init_null_blk nr_devices=0 queue_mode=2 shared_tag_bitmap=1; then + echo "Loading null_blk failed" + return 1 + fi + if ! _configure_null_blk nullb0 completion_nsec=0 blocksize=$bs size=1\ + submit_queues="$(nproc)" memory_backed=1 power=1; then + echo "Configuring null_blk failed" + return 1 + fi + fio --verify=md5 --rw=randwrite --bs=$bs --loops=$((10**6)) \ + --iodepth=64 --group_reporting --sync=1 --direct=1 \ + --ioengine=libaio --runtime="${TIMEOUT}" --thread \ + --name=block-031 --filename=/dev/nullb0 \ + --output="${RESULTS_DIR}/block/fio-output-031.txt" \ + >>"$FULL" + fio_status=$? + rmdir /sys/kernel/config/nullb/nullb0 + _exit_null_blk + case $fio_status in + 0) echo "Passed";; + *) echo "Failed (fio status = $fio_status)";; + esac +} diff --git a/tests/block/031.out b/tests/block/031.out new file mode 100644 index 000000000000..863339fb8ced --- /dev/null +++ b/tests/block/031.out @@ -0,0 +1 @@ +Passed