[U-Boot] [PATCH 2/2] test: fat: add test of non-contiguous file reads

Simon Glass sjg at chromium.org
Sat Oct 3 16:30:29 CEST 2015


Hi Stephen,

On 2 October 2015 at 06:56, Stephen Warren <swarren at wwwdotorg.org> wrote:
> In my patch series to replace fs/fat with "ff.c", I enhanced ff.c to
> optimize file reading, so that reads of contiguous clusters are submitted
> to the IO device as a single read. This test attempts to torture-test
> edge-cases of that enhancement.
>
> BTW, the only way I found to validate that this script actually does
> create non-contiguous files was to manually inspect the FAT bitmap in a
> hex dump of the FAT image. hdparm --fibmap doesn't work on loop-mounted
> filesystems. filefrag -v -e seems to lie about files being contiguous
> when they aren't.
>
> Signed-off-by: Stephen Warren <swarren at wwwdotorg.org>
> ---
>  test/fs/fat-noncontig-test.sh | 52 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 52 insertions(+)
>  create mode 100755 test/fs/fat-noncontig-test.sh
>
> diff --git a/test/fs/fat-noncontig-test.sh b/test/fs/fat-noncontig-test.sh
> new file mode 100755
> index 000000000000..8153708bbf78
> --- /dev/null
> +++ b/test/fs/fat-noncontig-test.sh
> @@ -0,0 +1,52 @@
> +#!/bin/bash
> +

Can you add a comment explaining what this test does?

Also I get this:

mount: mount point /mnt/tmp does not exist
umount: /mnt/tmp: not found
mount: mount point /mnt/tmp does not exist
/usr/bin/crc32: No such file or directory
umount: /mnt/tmp: not found

so does it need some extra steps?

> +odir=sandbox
> +img=${odir}/fat.img
> +mnt=/mnt/tmp
> +fill=/dev/urandom
> +testfn=noncontig.img
> +mnttestfn=${mnt}/${testfn}
> +crcaddr=0
> +loadaddr=1000
> +
> +make O=${odir} -s sandbox_defconfig && make O=${odir} -s -j8
> +
> +if [ ! -f ${img} ]; then
> +    fallocate -l 40M ${img}
> +    mkfs -t fat ${img}
> +
> +    sudo mount -o loop,uid=$(id -u) ${img} ${mnt}
> +
> +    for ((sects=8; sects < 512; sects += 8)); do
> +        fn=${mnt}/keep-${sects}.img
> +        dd if=${fill} of=${fn} bs=512 count=${sects} >/dev/null 2>&1
> +        fn=${mnt}/remove-${sects}.img
> +        dd if=${fill} of=${fn} bs=512 count=${sects} >/dev/null 2>&1
> +    done
> +
> +    rm -f ${mnt}/remove-*.img
> +
> +    # 511 deliberately to trigger a file size that's not a multiple of the
> +    # sector size (ignoring sizes that are multiples of both).
> +    dd if=${fill} of=${mnttestfn} bs=511 >/dev/null 2>&1
> +
> +    sudo umount ${mnt}
> +fi
> +
> +sudo mount -o ro,loop,uid=$(id -u) ${img} ${mnt}
> +crc=0x`crc32 ${mnttestfn}`
> +sudo umount ${mnt}
> +
> +crc=`printf %02x%02x%02x%02x \
> +    $((${crc} & 0xff)) \
> +    $(((${crc} >> 8) & 0xff)) \
> +    $(((${crc} >> 16) & 0xff)) \
> +    $((${crc} >> 24))`
> +
> +./sandbox/u-boot << EOF
> +host bind 0 ${img}
> +load host 0:0 ${loadaddr} ${testfn}
> +crc32 ${loadaddr} \$filesize ${crcaddr}
> +if itest.l *${crcaddr} != ${crc}; then echo FAILURE; else echo PASS; fi
> +reset
> +EOF
> --
> 1.9.1
>

Regards,
Simon


More information about the U-Boot mailing list