On 09/25/2017 12:53 AM, Rob Clark wrote:
On Sun, Sep 24, 2017 at 5:38 PM, Tom Rini <tr...@konsulko.com> wrote:
On Mon, Sep 25, 2017 at 12:07:36AM +0300, Tuomas Tynkkynen wrote:

Can you post, unrelated, the code that totally crashed sandbox?  Maybe
that's a problem we need to fix too :)

jfwiw, I've started looking at the fat_write code, so even a
failing/crashing test is useful.


On top of these three (also attached to avoid whitespace damage):

diff --git a/test/fs/fs-test.sh b/test/fs/fs-test.sh
index a8a55e41fc..eccc03a513 100755
--- a/test/fs/fs-test.sh
+++ b/test/fs/fs-test.sh
@@ -110,7 +110,7 @@ function create_image() {
        # Create image if not already present - saves time, while debugging
        case "$2" in
                fat16)
-               MKFS_OPTION="-F 16"
+               MKFS_OPTION="-F 16 -r 8192"
                FS_TYPE="fat"
                ;;
                fat32)
@@ -363,6 +363,10 @@ function create_files() {
                        &> /dev/null
        fi

+       for i in $(seq 1 256); do
+ sudo touch "$MOUNT_DIR/LONGNAME$(head -c 240 /dev/zero | tr '\0' 'X').$i"
+       done
+
        # Create a small file in this image.
        if [ ! -f "${MB1}" ]; then
                sudo dd if=/dev/urandom of="${MB1}" bs=1M count=1 \
@@ -570,7 +574,7 @@ TOTAL_PASS=0
 # In each loop, for a given file system image, we test both the
 # fs command, like load/size/write, the file system specific command
 # like: ext4load/ext4size/ext4write and the sb load/ls/save commands.
-for fs in ext4 fat16 fat32; do
+for fs in fat16; do

        echo "Creating $fs image if not already present."
        IMAGE=${IMG}.${fs}.img

Basically the problem is that curclust for the root directory is not <= 1 but rather some large positive value (0x01fffffe) in the following snippet in fat_write.c:

 867                 /*
 868                  * In FAT16/12, the root dir is locate before data area, 
shows
 869                  * in following:
 870                  * 
-------------------------------------------------------------
 871                  * | Boot | FAT1 & 2 | Root dir | Data (start from cluster 
#2) |
 872                  * 
-------------------------------------------------------------
 873                  *
 874                  * As a result if curclust is in Root dir, it is a negative
 875                  * number or 0, 1.
 876                  *
 877                  */
 878                 if (mydata->fatsize != 32 && (int)curclust <= 1) {
 879                         /* Current clust is in root dir, set to next clust 
*/
 880                         curclust++;

With fsdata->data_begin = 896,
     fsdata->rootdir_sect = 640,
     fsdata->clust_size = 128,
indeed sect_to_clust(rootdir_sect) doesn't underflow enough to be negative but ends up 0x01fffffe. That hack really needs excising from the tree...

Another fun thing that needs handling is that the root directory need not be a multiple of cluster size, being a multiple of sector size is enough according to fatgen103.pdf...
diff --git a/test/fs/fs-test.sh b/test/fs/fs-test.sh
index a8a55e41fc..eccc03a513 100755
--- a/test/fs/fs-test.sh
+++ b/test/fs/fs-test.sh
@@ -110,7 +110,7 @@ function create_image() {
 	# Create image if not already present - saves time, while debugging
 	case "$2" in
 		fat16)
-		MKFS_OPTION="-F 16"
+		MKFS_OPTION="-F 16 -r 8192"
 		FS_TYPE="fat"
 		;;
 		fat32)
@@ -363,6 +363,10 @@ function create_files() {
 			&> /dev/null
 	fi
 
+	for i in $(seq 1 256); do
+		sudo touch "$MOUNT_DIR/LONGNAME$(head -c 240 /dev/zero | tr '\0' 'X').$i"
+	done
+
 	# Create a small file in this image.
 	if [ ! -f "${MB1}" ]; then
 		sudo dd if=/dev/urandom of="${MB1}" bs=1M count=1 \
@@ -570,7 +574,7 @@ TOTAL_PASS=0
 # In each loop, for a given file system image, we test both the
 # fs command, like load/size/write, the file system specific command
 # like: ext4load/ext4size/ext4write and the sb load/ls/save commands.
-for fs in ext4 fat16 fat32; do
+for fs in fat16; do
 
 	echo "Creating $fs image if not already present."
 	IMAGE=${IMG}.${fs}.img
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to