Author: wmb Date: 2007-09-18 00:52:04 +0200 (Tue, 18 Sep 2007) New Revision: 605
Modified: ofw/fs/fatfs/fat.fth Log: FAT FS: Changed the search order for free clusters so the upward search happens before the downward one, thus eliminating severe FAT cache thrashing when creating large files, as with "save-nand".
Modified: ofw/fs/fatfs/fat.fth =================================================================== --- ofw/fs/fatfs/fat.fth 2007-09-17 22:47:27 UTC (rev 604) +++ ofw/fs/fatfs/fat.fth 2007-09-17 22:52:04 UTC (rev 605) @@ -53,13 +53,22 @@ \ If the FAT cache has been modified since it was last written, flush it \ to disk.
+: .sectors ( sector# #sectors -- ) + ." " . ." sectors starting at " . +; : ?flush-fat-cache ( -- ) fat-dirty w@ if - fat-sector @ #valid-sectors fat-cache @ write-sectors ( err? ) - if "CaW ". "FAT ". abort then + fat-sector @ #valid-sectors fat-cache @ write-sectors ( err? ) if + "CaW ". "FAT ". + fat-sector @ #valid-sectors .sectors + abort + then
- fat-sector @ spf l@ + #valid-sectors fat-cache @ write-sectors ( err? ) - if "CaW ". ." alternate " "FAT ". abort then + fat-sector @ spf l@ + #valid-sectors fat-cache @ write-sectors if + "CaW ". ." alternate " "FAT ". + fat-sector @ spf l@ + #valid-sectors .sectors + abort + then
false fat-dirty w! then @@ -172,11 +181,12 @@ fatc-start @ hint @ search-down if mark-cluster exit then then
+ \ Search up to the end of the disk ** 10/30/90 cpt: up to last cl (1+) + max-cl# l@ 1+ fatc-end @ search-up if mark-cluster exit then + \ Search down to the beginning of the disk 2 fatc-start @ search-down if mark-cluster exit then
- \ Search up to the end of the disk ** 10/30/90 cpt: up to last cl (1+) - max-cl# l@ 1+ fatc-end @ search-up if mark-cluster exit then false ; : allocate-cluster ( hint-cluster# -- false | cluster# true )