DF-3092 / run.log
=== DF-3092 build === === phase A: 7-cluster append (claim: phantom allocation) === wrote /root/df3092.img: maxcluster=4109 (FAT16), BIG.TXT=4102 clusters (2..4103), 6 real free (4104..4109), 18 phantom-free (4110..4127) avail before: 6 clusters x512B write(3584) returned -1 errno=28 (No space left on device) alive: 8:49AM up 16 mins, 0 users, load averages: 0.00, 0.00, 0.00 size after A: 2100224 (was 2100224) avail after A: 6 C1 pass: FAT entries 4110..4351 all zero (no phantom allocation ever reached the FAT) C2 pass: all dir entries start within 2..4109 C3 pass: BIG.TXT chain ends at cluster 4103 (EOF), dir size=2100224 TAILCHECK: ALL PASS === phase B: 6-cluster append (exactly the real free tail) === wrote /root/df3092.img: maxcluster=4109 (FAT16), BIG.TXT=4102 clusters (2..4103), 6 real free (4104..4109), 18 phantom-free (4110..4127) write(3072) returned 3072 size after B: 2103296 (expect 2103296) avail after B: 0 (expect 0) === phase C: one more 512B cluster (claim says 4110 is 'free') === write(512) returned -1 errno=28 (No space left on device) size after C: 2103296 alive: 8:49AM up 16 mins, 0 users, load averages: 0.00, 0.00, 0.00 === phase D: offline tailcheck (expect ALL PASS) === C1 pass: FAT entries 4110..4351 all zero (no phantom allocation ever reached the FAT) C2 pass: all dir entries start within 2..4109 C3 pass: BIG.TXT chain ends at cluster 4109 (EOF), dir size=2103296 TAILCHECK: ALL PASS RESULT: phantom clusters 4110..4127 were NEVER allocatable; the fillinusemap() FULL_RUN pre-fill (msdosfs_fat.c:897-898) marks them used, so chainlength() cannot overcount and usemap_alloc() never sees cn > pm_maxcluster. No panic path.