111a9947fSrtm // on-disk file system format 211a9947fSrtm 3*24111398Skaashoek #define BSIZE 512 // block size 4*24111398Skaashoek 5*24111398Skaashoek // sector 1 (2nd sector) 611a9947fSrtm struct superblock{ 7*24111398Skaashoek uint size; 8*24111398Skaashoek uint nblocks; 9*24111398Skaashoek uint ninodes; 1011a9947fSrtm }; 1111a9947fSrtm 12e8d11c2eSkaashoek #define NDIRECT 13 1311a9947fSrtm 1411a9947fSrtm struct dinode { 1511a9947fSrtm short type; 16e8d11c2eSkaashoek short major; 17e8d11c2eSkaashoek short minor; 1811a9947fSrtm short nlink; 1911a9947fSrtm uint size; 2011a9947fSrtm uint addrs[NDIRECT]; 2111a9947fSrtm }; 22e8d11c2eSkaashoek 2311a9947fSrtm #define T_DIR 1 2411a9947fSrtm #define T_FILE 2 25e8d11c2eSkaashoek #define T_DEV 3 2611a9947fSrtm 27*24111398Skaashoek // sector 0 is unused, sector 1 is superblock, inodes start at sector 2 28*24111398Skaashoek #define IPB (BSIZE / sizeof(struct dinode)) 29*24111398Skaashoek #define IBLOCK(inum) (inum / IPB + 2) // start of inode 30*24111398Skaashoek #define BPB (BSIZE*8) 31*24111398Skaashoek #define BBLOCK(b,ninodes) (b/BPB + (ninodes/IPB) + 3) // start of bitmap 3211a9947fSrtm 339d3fb671Srtm #define DIRSIZ 14 349d3fb671Srtm 3511a9947fSrtm struct dirent { 3611a9947fSrtm ushort inum; 379d3fb671Srtm char name[DIRSIZ]; 3811a9947fSrtm }; 3911a9947fSrtm 40