The current implementation of the test case loop/010 assumes that the prepared loop device is /dev/loop0, which is not always true. When other loop devices are set up before the test case run, the assumption is wrong and the test case fails. To avoid the failure, use the prepared loop device name stored in $loop_device instead of /dev/loop0. Adjust the grep string to meet the device name. Also use "losetup --detach" instead of "losetup --detach-all" to not detach the loop devices which existed before the test case runs. Fixes: 1c4ae4fed9b4 ("loop: Detect a race condition between loop detach and open") Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> --- tests/loop/010 | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/tests/loop/010 b/tests/loop/010 index ea396ec..f8c6f2c 100755 --- a/tests/loop/010 +++ b/tests/loop/010 @@ -16,18 +16,26 @@ requires() { } create_loop() { + local dev + while true do - loop_device="$(losetup --partscan --find --show "${image_file}")" - blkid /dev/loop0p1 >& /dev/null + dev="$(losetup --partscan --find --show "${image_file}")" + if [[ $dev != "$1" ]]; then + echo "Unepxected loop device set up: $dev" + return + fi + blkid "$dev" >& /dev/null done } detach_loop() { + local dev=$1 + while true do - if [ -e /dev/loop0 ]; then - losetup --detach /dev/loop0 >& /dev/null + if [[ -e "$dev" ]]; then + losetup --detach "$dev" >& /dev/null fi done } @@ -38,6 +46,7 @@ test() { local create_pid local detach_pid local image_file="$TMPDIR/loopImg" + local grep_str truncate --size 1G "${image_file}" parted --align none --script "${image_file}" mklabel gpt @@ -53,9 +62,9 @@ test() { mkfs.xfs --force "${loop_device}p1" >& /dev/null losetup --detach "${loop_device}" >& /dev/null - create_loop & + create_loop "${loop_device}" & create_pid=$! - detach_loop & + detach_loop "${loop_device}" & detach_pid=$! sleep "${TIMEOUT:-90}" @@ -66,8 +75,9 @@ test() { sleep 1 } 2>/dev/null - losetup --detach-all >& /dev/null - if _dmesg_since_test_start | grep --quiet "partition scan of loop0 failed (rc=-16)"; then + losetup --detach "${loop_device}" >& /dev/null + grep_str="partition scan of ${loop_device##*/} failed (rc=-16)" + if _dmesg_since_test_start | grep --quiet "$grep_str"; then echo "Fail" fi echo "Test complete" -- 2.45.0