From 966e6e4fe53abd4413fbf523f6080b7cc578c308 Mon Sep 17 00:00:00 2001 From: Bob Abeles Date: Mon, 6 Nov 2023 16:03:30 -0800 Subject: [PATCH 1/5] Shrink root dir size for tiny (<=128K) FAT12 fs --- lib/oofatfs/ff.c | 3 ++- tests/extmod/vfs_blockdev.py.exp | 2 +- tests/extmod/vfs_fat_ramdisk.py.exp | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/oofatfs/ff.c b/lib/oofatfs/ff.c index 12790c04a3..6404749e54 100644 --- a/lib/oofatfs/ff.c +++ b/lib/oofatfs/ff.c @@ -5422,7 +5422,7 @@ FRESULT f_mkfs ( ) { const UINT n_fats = 1; /* Number of FATs for FAT/FAT32 volume (1 or 2) */ - const UINT n_rootdir = 512; /* Number of root directory entries for FAT volume */ + UINT n_rootdir = 512; /* Number of root directory entries for FAT volume */ static const WORD cst[] = {1, 4, 16, 64, 256, 512, 0}; /* Cluster size boundary for FAT volume (4Ks unit) */ #if FF_MKFS_FAT32 static const WORD cst32[] = {1, 2, 4, 8, 16, 32, 0}; /* Cluster size boundary for FAT32 volume (128Ks unit) */ @@ -5703,6 +5703,7 @@ FRESULT f_mkfs ( } sz_fat = (n + ss - 1) / ss; /* FAT size [sector] */ sz_rsv = 1; /* Number of reserved sectors */ + n_rootdir = (sz_vol <= 256)? 64 : n_rootdir; /* Shrink root dir for <= 128K device */ sz_dir = (DWORD)n_rootdir * SZDIRE / ss; /* Rootdir size [sector] */ } b_fat = b_vol + sz_rsv; /* FAT base */ diff --git a/tests/extmod/vfs_blockdev.py.exp b/tests/extmod/vfs_blockdev.py.exp index a254133131..e3e326dd24 100644 --- a/tests/extmod/vfs_blockdev.py.exp +++ b/tests/extmod/vfs_blockdev.py.exp @@ -1,5 +1,5 @@ test -(512, 512, 16, 16, 16, 0, 0, 0, 0, 255) +(512, 512, 44, 44, 44, 0, 0, 0, 0, 255) [('test', 32768, 0, 90)] some datasome datasome datasome datasome datasome datasome datasome datasome datasome data test diff --git a/tests/extmod/vfs_fat_ramdisk.py.exp b/tests/extmod/vfs_fat_ramdisk.py.exp index 5407014d5f..55bfbfb8ef 100644 --- a/tests/extmod/vfs_fat_ramdisk.py.exp +++ b/tests/extmod/vfs_fat_ramdisk.py.exp @@ -1,7 +1,7 @@ True True label: LABEL TEST -statvfs: (512, 512, 16, 16, 16, 0, 0, 0, 0, 255) +statvfs: (512, 512, 44, 44, 44, 0, 0, 0, 0, 255) getcwd: / True [('foo_file.txt', 32768, 0, 6)] From 6d1b1700bb84d345950d16fe5c161e06d2c7b905 Mon Sep 17 00:00:00 2001 From: eightycc Date: Tue, 7 Nov 2023 13:50:51 -0800 Subject: [PATCH 2/5] Update vfs_blockdev.py.exp --- tests/extmod/vfs_blockdev.py.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/extmod/vfs_blockdev.py.exp b/tests/extmod/vfs_blockdev.py.exp index e3e326dd24..1833a42f04 100644 --- a/tests/extmod/vfs_blockdev.py.exp +++ b/tests/extmod/vfs_blockdev.py.exp @@ -1,5 +1,5 @@ test -(512, 512, 44, 44, 44, 0, 0, 0, 0, 255) +(512, 512, 40, 40, 40, 0, 0, 0, 0, 255) [('test', 32768, 0, 90)] some datasome datasome datasome datasome datasome datasome datasome datasome datasome data test From 2e72ea99e43a01f5bc40b74bbc911c12d229e9ab Mon Sep 17 00:00:00 2001 From: eightycc Date: Tue, 7 Nov 2023 13:51:18 -0800 Subject: [PATCH 3/5] Update lib/oofatfs/ff.c Co-authored-by: Dan Halbert --- lib/oofatfs/ff.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/oofatfs/ff.c b/lib/oofatfs/ff.c index 6404749e54..ee63e4984d 100644 --- a/lib/oofatfs/ff.c +++ b/lib/oofatfs/ff.c @@ -5422,7 +5422,8 @@ FRESULT f_mkfs ( ) { const UINT n_fats = 1; /* Number of FATs for FAT/FAT32 volume (1 or 2) */ - UINT n_rootdir = 512; /* Number of root directory entries for FAT volume */ + // CIRCUITPY-CHANGE: Make number of root directory entries changeable. See below. + UINT n_rootdir = 512; /* Default number of root directory entries for FAT volume */ static const WORD cst[] = {1, 4, 16, 64, 256, 512, 0}; /* Cluster size boundary for FAT volume (4Ks unit) */ #if FF_MKFS_FAT32 static const WORD cst32[] = {1, 2, 4, 8, 16, 32, 0}; /* Cluster size boundary for FAT32 volume (128Ks unit) */ From 4560f49279e17fea97c9c8915965f9bf576a83de Mon Sep 17 00:00:00 2001 From: eightycc Date: Tue, 7 Nov 2023 13:51:32 -0800 Subject: [PATCH 4/5] Update lib/oofatfs/ff.c Co-authored-by: Dan Halbert --- lib/oofatfs/ff.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/oofatfs/ff.c b/lib/oofatfs/ff.c index ee63e4984d..bc301f3ed4 100644 --- a/lib/oofatfs/ff.c +++ b/lib/oofatfs/ff.c @@ -5704,7 +5704,11 @@ FRESULT f_mkfs ( } sz_fat = (n + ss - 1) / ss; /* FAT size [sector] */ sz_rsv = 1; /* Number of reserved sectors */ - n_rootdir = (sz_vol <= 256)? 64 : n_rootdir; /* Shrink root dir for <= 128K device */ + // CIRCUITPY-CHANGE: For fewer than 256 clusters (128kB filesystem), + // shrink the root directory size from 512 entries to 128 entries. Note that + // long filenames will use two entries. This change affects only the root directory, + // not subdirectories + n_rootdir = (sz_vol <= 256) ? 128 : n_rootdir; sz_dir = (DWORD)n_rootdir * SZDIRE / ss; /* Rootdir size [sector] */ } b_fat = b_vol + sz_rsv; /* FAT base */ From a4c4c16dd57a75f0dbf3db581339d31bffecdfd2 Mon Sep 17 00:00:00 2001 From: eightycc Date: Tue, 7 Nov 2023 13:52:43 -0800 Subject: [PATCH 5/5] Update vfs_fat_ramdisk.py.exp --- tests/extmod/vfs_fat_ramdisk.py.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/extmod/vfs_fat_ramdisk.py.exp b/tests/extmod/vfs_fat_ramdisk.py.exp index 55bfbfb8ef..ac45b4b375 100644 --- a/tests/extmod/vfs_fat_ramdisk.py.exp +++ b/tests/extmod/vfs_fat_ramdisk.py.exp @@ -1,7 +1,7 @@ True True label: LABEL TEST -statvfs: (512, 512, 44, 44, 44, 0, 0, 0, 0, 255) +statvfs: (512, 512, 40, 40, 40, 0, 0, 0, 0, 255) getcwd: / True [('foo_file.txt', 32768, 0, 6)]