blob: b48cdc9e2b4da42854e3e5de4419e56396765c48 [file] [log] [blame] [edit]
#!/bin/bash
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2017 Omar Sandoval
#
# scsi_debug helper functions.
_have_scsi_debug() {
_have_modules scsi_debug
}
_init_scsi_debug() {
if ! modprobe -r scsi_debug || ! modprobe scsi_debug "$@"; then
return 1
fi
udevadm settle
local host_sysfs host target_sysfs target
SCSI_DEBUG_HOSTS=()
SCSI_DEBUG_TARGETS=()
SCSI_DEBUG_DEVICES=()
for host_sysfs in /sys/class/scsi_host/*; do
if [[ "$(cat "${host_sysfs}/proc_name")" = scsi_debug ]]; then
host="${host_sysfs#/sys/class/scsi_host/host}"
SCSI_DEBUG_HOSTS+=("$host")
for target_sysfs in /sys/class/scsi_device/"$host":*; do
target="${target_sysfs#/sys/class/scsi_device/}"
SCSI_DEBUG_TARGETS+=("$target")
SCSI_DEBUG_DEVICES+=("$(ls "$target_sysfs/device/block")")
done
fi
done
if [[ ${#SCSI_DEBUG_HOSTS[@]} -eq 0 ]]; then
echo "Could not find scsi_debug hosts" >&2
_exit_scsi_debug
return 1
fi
if [[ ${#SCSI_DEBUG_TARGETS[@]} -eq 0 ]]; then
echo "Could not find scsi_debug targets" >&2
_exit_scsi_debug
return 1
fi
return 0
}
_exit_scsi_debug() {
unset SCSI_DEBUG_HOSTS
unset SCSI_DEBUG_TARGETS
unset SCSI_DEBUG_DEVICES
udevadm settle
modprobe -r scsi_debug
}