test: fat: add error-checking to non-contig test

Check the result code of all command that are executed. Without this,
if the fallocate invocation fails (this feature is not supported on ext3
filesystems for example) then a zero-length output file will be created,
and subsequent the mkfs and mount invocations will fail, which will cause
the subsequent dd invocation to attempt to fill up the host's entire free
disk space. That's not a nice user experience!

Related, if fallocate does fail, try to create the test disk image using
dd instead. That should work everywhere.

Fixes: 4a28274227 ("test: fat: add test of non-contiguous file reads")
Signed-off-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
Stephen Warren 2015-11-17 10:29:07 -07:00 committed by Tom Rini
parent 60f989a939
commit 34a60d9bc8

View File

@ -74,9 +74,25 @@ make O=${odir} -s sandbox_defconfig && make O=${odir} -s -j8
mkdir -p ${mnt}
if [ ! -f ${img} ]; then
fallocate -l 40M ${img}
if [ $? -ne 0 ]; then
echo fallocate failed - using dd instead
dd if=/dev/zero of=${img} bs=1024 count=$((40 * 1024))
if [ $? -ne 0 ]; then
echo Could not create empty disk image
exit $?
fi
fi
mkfs.fat ${img}
if [ $? -ne 0 ]; then
echo Could not create FAT filesystem
exit $?
fi
sudo mount -o loop,uid=$(id -u) ${img} ${mnt}
if [ $? -ne 0 ]; then
echo Could not mount test filesystem
exit $?
fi
for ((sects=8; sects < 512; sects += 8)); do
fn=${mnt}/keep-${sects}.img
@ -92,11 +108,23 @@ if [ ! -f ${img} ]; then
dd if=${fill} of=${mnttestfn} bs=511 >/dev/null 2>&1
sudo umount ${mnt}
if [ $? -ne 0 ]; then
echo Could not unmount test filesystem
exit $?
fi
fi
sudo mount -o ro,loop,uid=$(id -u) ${img} ${mnt}
if [ $? -ne 0 ]; then
echo Could not mount test filesystem
exit $?
fi
crc=0x`crc32 ${mnttestfn}`
sudo umount ${mnt}
if [ $? -ne 0 ]; then
echo Could not unmount test filesystem
exit $?
fi
crc=`printf %02x%02x%02x%02x \
$((${crc} & 0xff)) \
@ -111,3 +139,7 @@ crc32 ${loadaddr} \$filesize ${crcaddr}
if itest.l *${crcaddr} != ${crc}; then echo FAILURE; else echo PASS; fi
reset
EOF
if [ $? -ne 0 ]; then
echo U-Boot exit status indicates an error
exit $?
fi