Commit 2013094c authored by Krzysztof Karas's avatar Krzysztof Karas Committed by Tomasz Zawadzki
Browse files

sw_hotplug: revert "sw_hotplug: avoid hotplug timeouts"



This reverts commit 95aa1a73,
which introduced a race between timeout command
and reading its subprocess PID.

Change-Id: I4450449f8bd3fa5a71a11e5ea445dce360a4ec06
Signed-off-by: default avatarKrzysztof Karas <krzysztof.karas@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16510


Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 827a0113
Loading
Loading
Loading
Loading
+22 −18
Original line number Diff line number Diff line
@@ -8,9 +8,6 @@ rootdir=$(readlink -f $testdir/../..)
source $rootdir/scripts/common.sh
source $rootdir/test/common/autotest_common.sh

export PYTHONPATH="$rootdir/examples/nvme/hotplug/"
rpc_py=$rootdir/scripts/rpc.py

# Pci bus hotplug
# Helper function to remove/attach cotrollers
remove_attach_helper() {
@@ -19,6 +16,12 @@ remove_attach_helper() {
	local use_bdev=$3
	local dev

	# We need to make sure we wait long enough for hotplug to initialize the devices
	# and start IO - if we start removing devices before that happens we will end up
	# stepping on hotplug's toes forcing it to fail to report proper count of given
	# events.
	sleep "$hotplug_wait"

	while ((hotplug_events--)); do
		for dev in "${nvmes[@]}"; do
			echo 1 > "/sys/bus/pci/devices/$dev/remove"
@@ -69,29 +72,30 @@ remove_attach_helper() {
run_hotplug() {
	trap 'killprocess $hotplug_pid; exit 1' SIGINT SIGTERM EXIT

	test_time=$((hotplug_events * hotplug_wait * nvme_count))

	# Hotplug may sometimes hang, so start it via timeout command.
	timeout -k 2s $((test_time + hotplug_wait)) "$SPDK_EXAMPLE_DIR/hotplug" \
	"$SPDK_EXAMPLE_DIR/hotplug" \
		-i 0 \
		-t $((test_time)) \
		-t $((hotplug_events * hotplug_wait + hotplug_wait * 3)) \
		-n $((hotplug_events * nvme_count)) \
		-r $((hotplug_events * nvme_count)) \
		-l warning --wait-for-rpc &
	timeout_pid=$!
	hotplug_pid=$(ps -o pid= --ppid "$timeout_pid")

	# Make sure Hotplug started before removing and inserting devices.
	waitforlisten "$hotplug_pid"

	$rpc_py --plugin hotplug_plugin perform_tests
		-l warning &
	hotplug_pid=$!

	remove_attach_helper "$hotplug_events" "$hotplug_wait" false

	trap - SIGINT SIGTERM EXIT
	# Wait in case hotplug app is lagging behind
	# and kill it, if it hung.
	sleep $hotplug_wait

	if ! kill -0 "$hotplug_pid"; then
		# hotplug already finished, check for the error code.
		wait "$hotplug_pid"
	else
		echo "Killing hotplug application"
		killprocess $hotplug_pid
		return 1
	fi

	# Check timeout return code.
	wait "$timeout_pid"
	trap - SIGINT SIGTERM EXIT
}

# SPDK target hotplug