[PATCH] fs: fat: fix fat iteration

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Jun 9 12:00:42 CEST 2020


On 09.06.20 11:35, Christian Gmeiner wrote:
> Hi
>
> Am Di., 9. Juni 2020 um 09:19 Uhr schrieb Heinrich Schuchardt
> <xypron.glpk at gmx.de>:
>>
>> On 09.06.20 09:09, Christian Gmeiner wrote:
>>> According to the FAT specification it is valid to have files with an
>>> attribute value of 0x0. This fixes a regression where different U-Boot
>>> versions are showing different amount of files on the same storage
>>> device. With this change U-Boot shows the same number of files and folders
>>> as Linux and Windows.
>>>
>>> Fixes: 39606d462c ("fs: fat: handle deleted directory entries correctly")
>>> Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
>>
>> Thanks for reporting and resolving the issue.
>>
>> Could you, please, provide a test image to reproduce the issue.
>>
>
> What are the requirements for such a test image?

I am looking for a file with a FAT file system that I can mount on Linux
and later in U-Boot to see that it is correct in Linux but appears
corrupted in U-Boot without your patch.

When thinking about a test case it would be even better if you could
provide the sequence of commands that creates such an image file, e.g.

dd if=/dev/zero of=test.img bs=64k count=1
mkfs.vfat test.img
mkdir mnt
mount test.img mnt
mkdir mnt/foo
touch mnt/bar
rmdir mnt/foo
ls mnt -la
umount mnt

For testing we can use the sandbox:

make sandbox_defconfig
./u-boot
host bind 1 test.img
ls host 1:0

The sequence above does not show the problem. Here we need your experience.

Best regards

Heinrich

>
>> Further it would be helpful to add a test case in test/py/tests/test_fs.
>>
>
> I can try it but I have almost no overview on how to do it.
>
>> Best regards
>>
>> Heinrich
>>
>>> ---
>>>  fs/fat/fat.c | 4 +---
>>>  1 file changed, 1 insertion(+), 3 deletions(-)
>>>
>>> diff --git a/fs/fat/fat.c b/fs/fat/fat.c
>>> index 7fd29470c1..9578b74bae 100644
>>> --- a/fs/fat/fat.c
>>> +++ b/fs/fat/fat.c
>>> @@ -949,9 +949,7 @@ static int fat_itr_next(fat_itr *itr)
>>>                               /* Volume label or VFAT entry, skip */
>>>                               continue;
>>>                       }
>>> -             } else if (!(dent->attr & ATTR_ARCH) &&
>>> -                        !(dent->attr & ATTR_DIR))
>>> -                     continue;
>>> +             }
>>>
>>>               /* short file name */
>>>               break;
>>>
>>
>>
>
>



More information about the U-Boot mailing list