Re: [PATCH] fs/fat: fix FAT32 detection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Dec 24, 2018 at 10:16:42AM +0000, Alexander Kurz wrote:
> From: Alexander Kurz <akurz@xxxxxxxx>
> 
> Limits for the number of clusters were used to determine the FAT fs type.
> This fails e.g. for FAT32 fs with low cluster number that can be found
> in certain Android images.
> Sync the FAT fs type detection to the method used in linux by checking
> the sectors/FAT entries at offset 0x16 (must be zero for FAT32) and offset
> 0x24 (must be non-zero for FAT32).
> 
> Signed-off-by: Alexander Kurz <akurz@xxxxxxxx>
> ---
>  fs/fat/ff.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)

Applied, thanks

Sascha

> 
> diff --git a/fs/fat/ff.c b/fs/fat/ff.c
> index 33f8b6195..ba4adfc13 100644
> --- a/fs/fat/ff.c
> +++ b/fs/fat/ff.c
> @@ -1591,9 +1591,14 @@ static int chk_mounted (	/* 0(0): successful, !=0: any error occurred */
>  		return -EINVAL;
>  
>  	/* Number of sectors per FAT */
> +	fmt = FS_FAT12;
>  	fasize = LD_WORD(fs->win+BPB_FATSz16);
> -	if (!fasize)
> +	if (!fasize) {
>  		fasize = LD_DWORD(fs->win+BPB_FATSz32);
> +		if (fasize)
> +			/* Must be FAT32 */
> +			fmt = FS_FAT32;
> +	}
>  	fs->fsize = fasize;
>  
>  	/* Number of FAT copies */
> @@ -1633,11 +1638,8 @@ static int chk_mounted (	/* 0(0): successful, !=0: any error occurred */
>  	nclst = (tsect - sysect) / fs->csize;
>  	if (!nclst)
>  		return -EINVAL;	/* (Invalid volume size) */
> -	fmt = FS_FAT12;
> -	if (nclst >= MIN_FAT16)
> +	if (fmt == FS_FAT12 && nclst >= MIN_FAT16)
>  		fmt = FS_FAT16;
> -	if (nclst >= MIN_FAT32)
> -		fmt = FS_FAT32;
>  
>  	/* Boundaries and Limits */
>  	/* Number of FAT entries */
> -- 
> 2.11.0
> 
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux