1*01a344a2SDavid du Colombier changes to Ken's file server to make this 63-bit file server 2*01a344a2SDavid du Colombier 3*01a344a2SDavid du Colombier Geoff Collyer 4*01a344a2SDavid du Colombier July—October 2004 5*01a344a2SDavid du Colombier 6*01a344a2SDavid du Colombiernote: 2⁶=9,223,372,036,854,775,808 or 8EB (9.2×10ⁱ⁸) 7*01a344a2SDavid du Colombier 8*01a344a2SDavid du Colombier• identified longs that refer to offsets, sizes and block numbers, and 9*01a344a2SDavid du Colombierchanged them to type Off (vlong); fixed all print formats to match. 10*01a344a2SDavid du Colombierfixed byte-swapping for the 'x' config to match. 11*01a344a2SDavid du Colombier 12*01a344a2SDavid du Colombier• fixed VLONG 9p1 message packing and unpacking macros to actually 13*01a344a2SDavid du Colombierhandle 64-bit offsets and sizes. 14*01a344a2SDavid du Colombier 15*01a344a2SDavid du Colombier• implemented triple-indirect blocks. affected code in 16*01a344a2SDavid du Colombier dev/cw.c port/con.c port/dentry.c port/sub.c 17*01a344a2SDavid du Colombier port/chk.c port/console.c port/portdat.h 18*01a344a2SDavid du Colombier 19*01a344a2SDavid du Colombier• Fri Aug 6 16:50:59 PDT 2004 20*01a344a2SDavid du Colombier ; ./sizes 21*01a344a2SDavid du Colombier Plan 9 v4 63-bit file server 22*01a344a2SDavid du Colombier sizeof(Dentry) = 124 23*01a344a2SDavid du Colombier sizeof(Cache) = 88 24*01a344a2SDavid du Colombier 25*01a344a2SDavid du Colombier• added long(er) file name components (56 bytes), long enough for all but one 26*01a344a2SDavid du Colombier name in my /.longnames file (68-byte .xml name). 27*01a344a2SDavid du Colombier 28*01a344a2SDavid du Colombier• Fri Aug 6 21:43:41 PDT 2004 29*01a344a2SDavid du Colombier ; ./sizes 30*01a344a2SDavid du Colombier Plan 9 v4 63-bit file server sizes 31*01a344a2SDavid du Colombier sizeof(Dentry) = 160 32*01a344a2SDavid du Colombier sizeof(Cache) = 88 33*01a344a2SDavid du Colombier 34*01a344a2SDavid du Colombier• touched up lib.h (from libc.h) to bring it up to date with formatting 35*01a344a2SDavid du Colombier functions, verbs & flags. 36*01a344a2SDavid du Colombier• check now reports stack usage: 320 bytes upon entry to fsck first time, 37*01a344a2SDavid du Colombier 92 bytes of stack per recursion. given 16000 bytes of stack, 38*01a344a2SDavid du Colombier that's 170 recursions maximum. 39*01a344a2SDavid du Colombier• booted xtc (terminal) from fs64 (used fs64 as main file system) 40*01a344a2SDavid du Colombier 41*01a344a2SDavid du Colombiernote: current file server with triple-indirect blocks at 4k block size 42*01a344a2SDavid du Colombier has a maximum file size of ~505GB (5.42×10ⁱⁱ). 43*01a344a2SDavid du Colombier with quadruple-indirect blocks, max would be ~275TB @ 4k block size. 44*01a344a2SDavid du Colombier 45*01a344a2SDavid du Colombier• got igbe fs driver working (a couple small changes) 46*01a344a2SDavid du Colombier• eliminated some gotos (started with 580, down to 454) 47*01a344a2SDavid du Colombier• added quadruple indirect blocks: lets us reach 2⁶ with a 32kB block size 48*01a344a2SDavid du Colombier• got igbe boot driver & pxe booting working 49*01a344a2SDavid du Colombier• on-disk qid paths are now Offs, but 9p1 qids on the wire are still ulongs 50*01a344a2SDavid du Colombier• generalised & parameterised indirect block implementation 51*01a344a2SDavid du Colombier• tested with plain w0 fs, cached fake worm on w0, cw jukebox (hp 160fx) 52*01a344a2SDavid du Colombier• ip directories in fs & fs64 are identical except for whitespace and 53*01a344a2SDavid du Colombier goto-elimination 54*01a344a2SDavid du Colombier• replaced most of nemo's ide code with newer ide code lifted from 9load, 55*01a344a2SDavid du Colombier then from cpu kernel (sdata.c & support). this brings us dma, rwm & lba48, 56*01a344a2SDavid du Colombier finds ide controllers by itself, even pci ones, & copes with dead drives 57*01a344a2SDavid du Colombier (i.e., doesn't panic). 58*01a344a2SDavid du Colombier• fixed long-standing bug that caused a 5-second delay before each console 59*01a344a2SDavid du Colombier prompt on systems without a serial console. 60*01a344a2SDavid du Colombier• further type parameterisation: Userid (short), Timet (long), Devsize (vlong). 61*01a344a2SDavid du Colombier Comment on v7 kernel portability work, quoting scj & dmr from BSTJ v57 62*01a344a2SDavid du Colombier #6 part 2., p. 2038: ``The important data types used within the 63*01a344a2SDavid du Colombier system were identified and specified using typedef: disk offsets, 64*01a344a2SDavid du Colombier absolute times, internal device names, and the like. This effort was 65*01a344a2SDavid du Colombier carried out by K. Thompson.'' 66*01a344a2SDavid du Colombier• corrected compat.h dependencies in mkfiles 67*01a344a2SDavid du Colombier• eliminated all warnings 68*01a344a2SDavid du Colombier• implemented truncation via wstat 69