Hi Shinichiro, > -----Original Message----- > From: Shin'ichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> > Sent: Thursday, June 20, 2024 4:12 PM > To: linux-block@xxxxxxxxxxxxxxx > Cc: Gulam Mohamed <gulam.mohamed@xxxxxxxxxx>; Shin'ichiro Kawasaki > <shinichiro.kawasaki@xxxxxxx> > Subject: [PATCH blktests] loop/010: do not assume /dev/loop0 > > 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 Thanks for working on improving this test case. I tried to test this but I am getting the following errors: Running loop/010 +Unepxected loop device set up: /dev/loop1 Test complete This error is from the following "if" condition in function create_loop(): if [[ $dev != "$1" ]]; then echo "Unepxected loop device set up: $dev" return fi I was trying to understand the reason for this "if" condition. Without this "if" check, its working fine (With kernel fix the test case passes and without kernel fix, the test case fails which is expected).