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