fi
}
-# Get block dev scheduler list
-get_scheduler_list() {
- local b=$1 p
- p=/sys/block/"$b"/queue/scheduler
- if [ -e "$p" ]; then
- sed 's/[][]//g' /sys/block/"$b"/queue/scheduler
- else
- return 1
- fi
-}
-
# Get a /dev/... path that points at dm device number $1. Set its I/O scheduler
# to $2 and its timeout to $3. The shell script that includes this file must
# define a function get_bdev_path() that translates device number $1 into a
return 0
}
+# Prints a space-separated list with the names of all I/O schedulers supported
+# by block device $1.
+_io_schedulers() {
+ local path=/sys/class/block/$1/queue/scheduler
+
+ [ -e "${path}" ] || return 1
+ sed 's/[][]//g' "${path}"
+}
+
# Older versions of xfs_io use pwrite64 and such, so the error messages won't
# match current versions of xfs_io. See c52086226bc6 ("filter: xfs_io output
# has dropped "64" from error messages") in xfstests.
test_device() {
echo "Running ${TEST_NAME}"
- local scheds
# shellcheck disable=SC2207
- scheds=($(sed 's/[][]//g' "${TEST_DEV_SYSFS}/queue/scheduler"))
+ local scheds=($(_io_schedulers "$(basename "${TEST_DEV_SYSFS}")"))
if _test_dev_is_rotational; then
size="32m"
return 1
fi
- local scheds
- # shellcheck disable=SC2207
- scheds=($(sed 's/[][]//g' /sys/block/nullb0/queue/scheduler))
-
- for sched in "${scheds[@]}"; do
+ for sched in $(_io_schedulers nullb0); do
echo "Testing $sched" >> "$FULL"
echo "$sched" > /sys/block/nullb0/queue/scheduler
# Do a bunch of I/Os which will timeout and then complete. The
return 1
fi
- local scheds
- # shellcheck disable=SC2207
- scheds=($(sed 's/[][]//g' /sys/block/nullb0/queue/scheduler))
-
- for sched in "${scheds[@]}"; do
+ for sched in $(_io_schedulers nullb0); do
echo "Testing $sched" >> "$FULL"
echo "$sched" > /sys/block/nullb0/queue/scheduler
dd if=/dev/nullb0 of=/dev/null bs=4K count=$((512 * 1024)) \
return 1
fi
- local scheds
- # shellcheck disable=SC2207
- scheds=($(sed 's/[][]//g' /sys/block/nullb1/queue/scheduler))
-
local max_iodepth=$(($(cat /proc/sys/fs/aio-max-nr) / $(nproc)))
local iodepth=1024
if (( iodepth > max_iodepth )); then
iodepth=$max_iodepth
fi
- for sched in "${scheds[@]}"; do
+ for sched in $(_io_schedulers nullb1); do
echo "Testing $sched" >> "$FULL"
echo "$sched" > /sys/block/nullb1/queue/scheduler
_fio_perf --bs=4k --ioengine=libaio --iodepth=$iodepth \
local max_nr
local nr
- local scheds
- # shellcheck disable=SC2207
- scheds=($(sed 's/[][]//g' /sys/block/nullb1/queue/scheduler))
- for sched in "${scheds[@]}"; do
+ for sched in $(_io_schedulers nullb1); do
echo "Testing $sched" >> "$FULL"
echo "$sched" > /sys/block/nullb1/queue/scheduler
max_nr="$(cat /sys/block/nullb1/queue/nr_requests)"
use_blk_mq ${mq} || return $?
dev=$(get_bdev 0) || return $?
dm=$(basename "$(readlink -f "${dev}")") || return $?
- scheds="$(get_scheduler_list "$dm")" || return $?
+ scheds="$(_io_schedulers "$dm")" || return $?
for sched in $scheds; do
set_scheduler "$dm" "$sched" \
>>"$FULL" 2>&1 || continue
use_blk_mq ${mq} ${mq} || return $?
dev=$(get_bdev 0) || return $?
dm=$(basename "$(readlink -f "${dev}")") || return $?
- scheds="$(get_scheduler_list "$dm")" || return $?
+ scheds="$(_io_schedulers "$dm")" || return $?
for sched in $scheds; do
set_scheduler "$dm" "$sched" \
>>"$FULL" 2>&1 || continue