diff mbox series

fs: fat: fix fat iteration

Message ID 20200609070907.546971-1-christian.gmeiner@gmail.com
State Accepted
Commit 1788a9697f51aebb25623e6216c09304756748ff
Headers show
Series fs: fat: fix fat iteration | expand

Commit Message

Christian Gmeiner June 9, 2020, 7:09 a.m. UTC
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>
---
 fs/fat/fat.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

Comments

Heinrich Schuchardt June 9, 2020, 7:19 a.m. UTC | #1
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.

Further it would be helpful to add a test case in test/py/tests/test_fs.

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;
>
Christian Gmeiner June 9, 2020, 9:35 a.m. UTC | #2
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?

> 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;
> >
>
>
Heinrich Schuchardt June 9, 2020, 10 a.m. UTC | #3
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;
>>>
>>
>>
>
>
diff mbox series

Patch

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;