1*31085bb4Srsc // On-disk file system format. 2*31085bb4Srsc // This header is shared between kernel and user space. 3*31085bb4Srsc 4*31085bb4Srsc // Block 0 is unused. 5*31085bb4Srsc // Block 1 is super block. 6*31085bb4Srsc // Inodes start at block 2. 711a9947fSrtm 824111398Skaashoek #define BSIZE 512 // block size 924111398Skaashoek 10*31085bb4Srsc // File system super block 1111a9947fSrtm struct superblock { 12*31085bb4Srsc uint size; // Size of file system (bytes???) xxx 13*31085bb4Srsc uint nblocks; // Number of blocks 14*31085bb4Srsc uint ninodes; // Number of inodes. 1511a9947fSrtm }; 1611a9947fSrtm 175051da6dSrtm #define NADDRS (NDIRECT+1) 18ea2909b6Skaashoek #define NDIRECT 12 19ea2909b6Skaashoek #define INDIRECT 12 20ea2909b6Skaashoek #define NINDIRECT (BSIZE / sizeof(uint)) 21ea2909b6Skaashoek #define MAXFILE (NDIRECT + NINDIRECT) 2211a9947fSrtm 23*31085bb4Srsc // On-disk inode structure 2411a9947fSrtm struct dinode { 25*31085bb4Srsc short type; // File type 26*31085bb4Srsc short major; // Major device number (T_DEV only) 27*31085bb4Srsc short minor; // Minor device number (T_DEV only) 28*31085bb4Srsc short nlink; // Number of links to inode in file system 29*31085bb4Srsc uint size; // Size of file (bytes) 30*31085bb4Srsc uint addrs[NADDRS]; // Data block addresses 3111a9947fSrtm }; 32e8d11c2eSkaashoek 33*31085bb4Srsc #define T_DIR 1 // Directory 34*31085bb4Srsc #define T_FILE 2 // File 35*31085bb4Srsc #define T_DEV 3 // Special device 3611a9947fSrtm 37*31085bb4Srsc // Inodes per block. 3824111398Skaashoek #define IPB (BSIZE / sizeof(struct dinode)) 39*31085bb4Srsc 40*31085bb4Srsc // Block containing inode i 41*31085bb4Srsc #define IBLOCK(i) ((i) / IPB + 2) 42*31085bb4Srsc 43*31085bb4Srsc // Bitmap bits per block 4424111398Skaashoek #define BPB (BSIZE*8) 45*31085bb4Srsc 46*31085bb4Srsc // Block containing bit for block b 47*31085bb4Srsc #define BBLOCK(b, ninodes) (b/BPB + (ninodes)/IPB + 3) 4811a9947fSrtm 499d3fb671Srtm #define DIRSIZ 14 509d3fb671Srtm 5111a9947fSrtm struct dirent { 5211a9947fSrtm ushort inum; 539d3fb671Srtm char name[DIRSIZ]; 5411a9947fSrtm }; 55e958c538Skaashoek 56*31085bb4Srsc extern uint rootdev; // Device number of root file system 57e958c538Skaashoek 58