From: Alison Schofield <alison.schofi...@intel.com> monitor.sh runs for 50 seconds and spends 48 of those seconds sleeping after sync. It sleeps for 3 seconds each time it restarts the monitor, and 3 seconds before checking for expected log entries, a total of 16 naps.
Replace the sleeps with polling that waits for a max of 3 seconds but does so in 30 0.1 second intervals. This leaves the current behavior in place but offers a shorter run time for system configs capable of a faster sync. Again - I'd like to see some Tested-by's on this one because it wouldn't be the first time my golden environment wasn't representative of all environments where these tests are run. Thanks! Signed-off-by: Alison Schofield <alison.schofi...@intel.com> --- Changes in v2: - Poll for 3 seconds instead of removing sleep entirely (MarcH) - Update commit msg & log Link to v1: https://lore.kernel.org/nvdimm/20250514014133.1431846-1-alison.schofi...@intel.com/ test/monitor.sh | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/test/monitor.sh b/test/monitor.sh index be8e24d6f3aa..61cad098d87c 100755 --- a/test/monitor.sh +++ b/test/monitor.sh @@ -21,12 +21,45 @@ trap 'err $LINENO' ERR check_min_kver "4.15" || do_skip "kernel $KVER may not support monitor service" +wait_for_logfile_update() +{ + local file="$1" + local prev_size="$2" + local timeout=30 + local i=0 + + # prev_size is always zero because start_monitor truncates it. + # Set and check against it anyway to future proof. + while [ $i -lt $timeout ]; do + local new_size=$(stat -c%s "$file" 2>/dev/null || echo 0) + if [ "$new_size" -gt "$prev_size" ]; then + return 0 + fi + sleep 0.1 + i=$((i+1)) + done + + echo "logfile not updated within 3 seconds" + err "$LINENO" +} + start_monitor() { logfile=$(mktemp) $NDCTL monitor -c "$monitor_conf" -l "$logfile" $1 & monitor_pid=$! - sync; sleep 3 + sync + for i in {1..30}; do + if ps -p "$monitor_pid" > /dev/null; then + sleep 0.1 + break + fi + sleep 0.1 + done + if ! ps -p "$monitor_pid" > /dev/null; then + echo "monitor not ready within 3 seconds" + err "$LINENO" + fi truncate --size 0 "$logfile" #remove startup log } @@ -48,14 +81,18 @@ get_monitor_dimm() call_notify() { + local prev_size=$(stat -c%s "$logfile") "$TEST_PATH"/smart-notify "$smart_supported_bus" - sync; sleep 3 + sync + wait_for_logfile_update "$logfile" "$prev_size" } inject_smart() { + local prev_size=$(stat -c%s "$logfile") $NDCTL inject-smart "$monitor_dimms" $1 - sync; sleep 3 + sync + wait_for_logfile_update "$logfile" "$prev_size" } check_result() -- 2.37.3