[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