Skip to content

Commit

Permalink
loop/010: do not assume /dev/loop0
Browse files Browse the repository at this point in the history
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: 1c4ae4f ("loop: Detect a race condition between loop detach and open")
Reviewed-by: Gulam Mohamed <gulam.mohamed@oracle.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
  • Loading branch information
kawasaki committed Jun 28, 2024
1 parent a0b86e4 commit 775a058
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions tests/loop/010
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,23 @@ requires() {
}

create_loop() {
local dev=$1

while true
do
loop_device="$(losetup --partscan --find --show "${image_file}")"
blkid /dev/loop0p1 >& /dev/null
if losetup --partscan "$dev" "${image_file}" &> /dev/null; then
blkid "$dev"p1 >& /dev/null
fi
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
}
Expand All @@ -38,6 +43,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
Expand All @@ -53,9 +59,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}"
Expand All @@ -66,8 +72,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"
Expand Down

0 comments on commit 775a058

Please sign in to comment.