Wait for /dev/ggate* to appear after calling ggatel create in :ggatel_{file,md}

The test assumed that `ggatel create` created a device on completion, but that's
incorrect. This squashes the race by waiting for the device to appear, as
`ggatel create` daemonizes before issuing an ioctl to geom_gate(4) if not called
with `-v`.

Discussed with:	asomers
MFC after:	1 week
PR:		204616
Sponsored by:	Dell EMC Isilon
This commit is contained in:
Enji Cooper 2017-01-31 06:12:51 +00:00
parent d3a8234cef
commit 15b69ab272

View File

@ -74,7 +74,11 @@ ggatel_file_body()
atf_check ggatel create -u $us work
dd if=src of=/dev/ggate${us} bs=1m count=1 conv=notrunc
ggate_dev=/dev/ggate${us}
wait_for_ggate_device ${ggate_dev}
dd if=src of=${ggate_dev} bs=1m count=1 conv=notrunc
checksum src work
}
@ -104,7 +108,11 @@ ggatel_md_body()
atf_check ggatel create -u $us /dev/$work
dd if=/dev/$src of=/dev/ggate${us} bs=1m count=1 conv=notrunc
ggate_dev=/dev/ggate${us}
wait_for_ggate_device ${ggate_dev}
dd if=/dev/$src of=${ggate_dev} bs=1m count=1 conv=notrunc
checksum /dev/$src /dev/$work
}
@ -191,3 +199,14 @@ common_cleanup()
fi
true
}
# Bug 204616: ggatel(8) creates /dev/ggate* asynchronously if `ggatel create`
# isn't called with `-v`.
wait_for_ggate_device()
{
ggate_device=$1
while [ ! -c $ggate_device ]; do
sleep 0.5
done
}