From: Shin'ichiro Kawasaki Date: Tue, 19 Jul 2022 02:52:16 +0000 (+0900) Subject: common/cpuhotplug: allow _offline_cpu() call in sub-shell X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=107256dc53d55f558e349e463a5a99c3bb6b4189;p=users%2Fhch%2Fblktests.git common/cpuhotplug: allow _offline_cpu() call in sub-shell The helper function _offline_cpu() sets a value to RESTORE_CPUS_ONLINE. However, the commit bd6b882b2650 ("block/008: check CPU offline failure due to many IRQs") put _offline_cpu() call in sub-shell, then the set value to RESTORE_CPUS_ONLINE no longer affects function caller's environment. This resulted in off-lined CPUs not restored by _cleanup() when the test case block/008 calls only _offline_cpu() and does not call _online_cpu(). To fix the issue, set RESTORE_CPUS_ONLINE in _have_cpu_hotplug() in place of _offline_cpu(). _have_cpu_hotplug() is less likely to be called in sub-shell. In same manner, do not set RESTORE_CPUS_ONLINE in _online_cpu() either. Check that RESTORE_CPUS_ONLINE is set in _offline_cpu() to avoid unexpected CPUs left off-lined. This check also avoids a shellcheck warning. Fixes: bd6b882b2650 ("block/008: check CPU offline failure due to many IRQs") Reported-by: Yi Zhang Signed-off-by: Shin'ichiro Kawasaki --- diff --git a/common/cpuhotplug b/common/cpuhotplug index 7facd0d..e91c3bc 100644 --- a/common/cpuhotplug +++ b/common/cpuhotplug @@ -27,17 +27,20 @@ _have_cpu_hotplug() { SKIP_REASONS+=("CPU hotplugging is not supported") return 1 fi + + RESTORE_CPUS_ONLINE=1 return 0 } _online_cpu() { - # shellcheck disable=SC2034 - RESTORE_CPUS_ONLINE=1 echo 1 > "/sys/devices/system/cpu/cpu$1/online" } _offline_cpu() { - # shellcheck disable=SC2034 - RESTORE_CPUS_ONLINE=1 + if [[ -z ${RESTORE_CPUS_ONLINE} ]]; then + echo "offlining cpu but RESTORE_CPUS_ONLINE is not set" + return 1 + fi + echo 0 > "/sys/devices/system/cpu/cpu$1/online" }