]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
tests: lslocks filter, workaround duplicate lines in output
authorKarel Zak <kzak@redhat.com>
Thu, 9 Jul 2026 10:09:14 +0000 (12:09 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 9 Jul 2026 10:09:32 +0000 (12:09 +0200)
Duplicate lines have been observed in lslocks output on ppc64le
(kernel 7.0). The root cause is unknown. No duplication path has
been found in the lslocks code itself.

Wrap lslocks calls in do_lslocks() helper that deduplicates
consecutive identical lines via uniq. If duplicates are detected,
warn and mark the test as KNOWN FAILED.

Signed-off-by: Karel Zak <kzak@redhat.com>
tests/ts/lslocks/filter

index ed5e234fa64f8c3ffddfa853b8e5e857b5a0bc95..038790b1ba638996c5b2c20b958377c1062da5d9 100755 (executable)
@@ -49,12 +49,33 @@ if ! dd if=/dev/zero of="$FILE" bs=$SIZE count=1 status=none; then
     ts_skip "failed to create a temporary file"
 fi
 
+# Duplicate lines have been observed in lslocks output on ppc64le
+# (kernel 7.0). The root cause is unknown. No duplication path has
+# been found in the lslocks code itself. Remove duplicates to avoid
+# false test failures, but warn about it.
+LSLOCKS_DUP_FOUND=""
+
+do_lslocks()
+{
+    local raw
+    raw=$("$TS_CMD_LSLOCKS" "$@")
+    if [ -z "$raw" ]; then
+       return
+    fi
+    local dedup
+    dedup=$(echo "$raw" | uniq)
+    if [ "$raw" != "$dedup" ]; then
+       LSLOCKS_DUP_FOUND="yes"
+    fi
+    echo "$dedup"
+}
+
 do_lslocks_flock_crash()
 {
     local pid=$1
 
     echo "#### crash when printing PID column ####"
-    [[ "$pid" == $("$TS_CMD_LSLOCKS" \
+    [[ "$pid" == $(do_lslocks \
                       --raw --noheadings --pid "$PID" \
                       --filter 'PATH =~ '"'.*/$FILE'"" and TYPE == 'FLOCK'" \
                       --output PID) ]]
@@ -70,49 +91,49 @@ do_lslocks_common()
     echo "#### $type $bopt (common) ####"
 
     echo '# -Q PID == ...'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid" -o $COLS
 
     echo '# -Q PATH =~ .*/...'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PATH =~ '.*/$FILE'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PATH =~ '.*/$FILE'" -o $COLS
     echo '# -Q PATH =~ .*/...x'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PATH =~ '.*/${FILE}x'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PATH =~ '.*/${FILE}x'" -o $COLS
 
     echo '# -Q PID == ... SIZE == '"$SIZE"
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and SIZE == $SIZE" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and SIZE == $SIZE" -o $COLS
     echo '# -Q PID == ... SIZE < '"$SIZE"
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and SIZE < $SIZE" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and SIZE < $SIZE" -o $COLS
     echo '# -Q PID == ... SIZE > '"$SIZE"
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and SIZE > $SIZE" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and SIZE > $SIZE" -o $COLS
 
 
     echo '# -Q PID == ... SIZE == '"$HSIZE"
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and SIZE == $HSIZE" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and SIZE == $HSIZE" -o $COLS
     echo '# -Q PID == ... SIZE < '"$HSIZE"
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and SIZE < $HSIZE" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and SIZE < $HSIZE" -o $COLS
     echo '# -Q PID == ... SIZE > '"$HSIZE"
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and SIZE > $HSIZE" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and SIZE > $HSIZE" -o $COLS
 
     echo '# -Q PID == ... TYPE == FLOCK'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and TYPE == 'FLOCK'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and TYPE == 'FLOCK'" -o $COLS
     echo '# -Q PID == ... TYPE != FLOCK'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and TYPE != 'FLOCK'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and TYPE != 'FLOCK'" -o $COLS
     echo '# -Q PID == ... TYPE == POSIX'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and TYPE == 'POSIX'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and TYPE == 'POSIX'" -o $COLS
     echo '# -Q PID == ... TYPE != POSIX'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and TYPE != 'POSIX'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and TYPE != 'POSIX'" -o $COLS
     echo '# -Q PID == ... TYPE == OFDLCK'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and TYPE == 'OFDLCK'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and TYPE == 'OFDLCK'" -o $COLS
     echo '# -Q PID == ... TYPE != OFDLCK'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and TYPE != 'OFDLCK'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and TYPE != 'OFDLCK'" -o $COLS
 
     echo '# -Q PID == ... MODE == READ'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and MODE == 'READ'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and MODE == 'READ'" -o $COLS
     echo '# -Q PID == ... MODE != READ'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and MODE != 'READ'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and MODE != 'READ'" -o $COLS
     echo '# -Q PID == ... MODE == WRITE'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and MODE == 'WRITE'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and MODE == 'WRITE'" -o $COLS
     echo '# -Q PID == ... MODE != WRITE'
-    "$TS_CMD_LSLOCKS" $bopt -r -n -Q "PID == $pid and MODE != 'WRITE'" -o $COLS
+    do_lslocks $bopt -r -n -Q "PID == $pid and MODE != 'WRITE'" -o $COLS
     echo
 }
 
@@ -124,18 +145,18 @@ do_lslocks_fcntl()
     echo "#### $type (fcntl specific) ####"
 
     echo '# -Q PID == ... START == $START'
-    "$TS_CMD_LSLOCKS" -r -n -Q "PID == $pid and START == $START" -o $COLS
+    do_lslocks -r -n -Q "PID == $pid and START == $START" -o $COLS
     echo '# -Q PID == ... START < $START'
-    "$TS_CMD_LSLOCKS" -r -n -Q "PID == $pid and START < $START" -o $COLS
+    do_lslocks -r -n -Q "PID == $pid and START < $START" -o $COLS
     echo '# -Q PID == ... START > $START'
-    "$TS_CMD_LSLOCKS" -r -n -Q "PID == $pid and START > $START" -o $COLS
+    do_lslocks -r -n -Q "PID == $pid and START > $START" -o $COLS
 
     echo '# -Q PID == ... END == $END'
-    "$TS_CMD_LSLOCKS" -r -n -Q "PID == $pid and END == $END" -o $COLS
+    do_lslocks -r -n -Q "PID == $pid and END == $END" -o $COLS
     echo '# -Q PID == ... END < $END'
-    "$TS_CMD_LSLOCKS" -r -n -Q "PID == $pid and END < $END" -o $COLS
+    do_lslocks -r -n -Q "PID == $pid and END < $END" -o $COLS
     echo '# -Q PID == ... END > $END'
-    "$TS_CMD_LSLOCKS" -r -n -Q "PID == $pid and END > $END" -o $COLS
+    do_lslocks -r -n -Q "PID == $pid and END > $END" -o $COLS
 }
 
 {
@@ -164,4 +185,9 @@ do_lslocks_fcntl()
 
 } > "$TS_OUTPUT" 2>&1
 
+if [ "$LSLOCKS_DUP_FOUND" = "yes" ]; then
+    echo "WARNING: duplicate lines in lslocks output" >&2
+    TS_KNOWN_FAIL="yes"
+fi
+
 ts_finalize