diff options
Diffstat (limited to 'sys-fs/dosfstools/files/dosfstools-2.11-fat32size.patch')
-rw-r--r-- | sys-fs/dosfstools/files/dosfstools-2.11-fat32size.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/sys-fs/dosfstools/files/dosfstools-2.11-fat32size.patch b/sys-fs/dosfstools/files/dosfstools-2.11-fat32size.patch new file mode 100644 index 000000000000..5047155dd841 --- /dev/null +++ b/sys-fs/dosfstools/files/dosfstools-2.11-fat32size.patch @@ -0,0 +1,46 @@ +Fix generation of FAT filesystems on devices that are 256meg in size + +Patch by Ulrich Mueller and accepted upstream + +http://bugs.gentoo.org/112504 + +--- mkdosfs/mkdosfs.c ++++ mkdosfs/mkdosfs.c +@@ -769,18 +769,19 @@ + 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 */ +@@ -1036,6 +1037,8 @@ + 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); |