From e670ea82c9a0da446a0d7c88c580c4d2c8be7b59 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 26 Sep 2008 15:33:36 +0200 Subject: [PATCH] Applying Gentoos dosfstools-2.11-fat32size.patch from Mike Frysinger to fix generation of filesystems on 256meg devices: * Fix generation of FAT filesystems on devices that are 256meg in size Patch by Ulrich Mueller and accepted upstream http://bugs.gentoo.org/112504 Signed-off-by: Daniel Baumann --- mkdosfs/mkdosfs.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/mkdosfs/mkdosfs.c b/mkdosfs/mkdosfs.c index 3842630..b3ca1e0 100644 --- a/mkdosfs/mkdosfs.c +++ b/mkdosfs/mkdosfs.c @@ -764,18 +764,19 @@ establish_params (int device_num,int size) size_fat = 32; } if (size_fat == 32) { - /* For FAT32, try to do the same as M$'s format command: - * fs size < 256M: 0.5k clusters - * fs size < 8G: 4k clusters - * fs size < 16G: 8k clusters - * fs size >= 16G: 16k clusters + /* For FAT32, try to do the same as M$'s format command + * (see http://www.win.tue.nl/~aeb/linux/fs/fat/fatgen103.pdf p. 20): + * fs size <= 260M: 0.5k clusters + * fs size <= 8G: 4k clusters + * fs size <= 16G: 8k clusters + * fs size > 16G: 16k clusters */ unsigned long sz_mb = (blocks+(1<<(20-BLOCK_SIZE_BITS))-1) >> (20-BLOCK_SIZE_BITS); - bs.cluster_size = sz_mb >= 16*1024 ? 32 : - sz_mb >= 8*1024 ? 16 : - sz_mb >= 256 ? 8 : - 1; + bs.cluster_size = sz_mb > 16*1024 ? 32 : + sz_mb > 8*1024 ? 16 : + sz_mb > 260 ? 8 : + 1; } else { /* FAT12 and FAT16: start at 4 sectors per cluster */ @@ -1031,6 +1032,8 @@ setup_tables (void) break; case 32: + if (clust32 < MIN_CLUST_32) + fprintf(stderr, "WARNING: Not enough clusters for a 32 bit FAT!\n"); cluster_count = clust32; fat_length = fatlength32; bs.fat_length = CT_LE_W(0);