#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2018 Omar Sandoval
#
# Test blk-mq requeues with all schedulers using null-blk. Regression test for
# commit ba989a01469d ("block: kyber: fix domain token leak during requeue").

. tests/block/rc
. common/null_blk

DESCRIPTION="run null-blk on different schedulers with requeue injection configured"
QUICK=1

requires() {
	_have_null_blk && _have_module_param null_blk requeue
}

test() {
	echo "Running ${TEST_NAME}"

	# The format is "<interval>,<probability>,<space>,<times>". Here, we
	# requeue 10% of the time.
	if ! _init_null_blk queue_mode=2 requeue='1,10,0,-1'; then
		return 1
	fi

	local scheds
	# shellcheck disable=SC2207
	scheds=($(sed 's/[][]//g' /sys/block/nullb0/queue/scheduler))

	for sched in "${scheds[@]}"; do
		echo "Testing $sched" >> "$FULL"
		echo "$sched" > /sys/block/nullb0/queue/scheduler
		dd if=/dev/nullb0 of=/dev/null bs=4K count=$((512 * 1024)) \
			iflag=direct status=none
	done

	_exit_null_blk

	echo "Test complete"
}
