131085bb4Srsc // On-disk file system format. 28e88f9e2Srtm // Both the kernel and user programs use this header file. 331085bb4Srsc 431085bb4Srsc // Block 0 is unused. 531085bb4Srsc // Block 1 is super block. 631085bb4Srsc // Inodes start at block 2. 711a9947fSrtm 8*2ce40d70Srtm #define ROOTINO 1 // root i-number 924111398Skaashoek #define BSIZE 512 // block size 1024111398Skaashoek 1131085bb4Srsc // File system super block 1211a9947fSrtm struct superblock { 13d911d83cSrsc uint size; // Size of file system image (blocks) 14d911d83cSrsc uint nblocks; // Number of data blocks 1531085bb4Srsc uint ninodes; // Number of inodes. 1611a9947fSrtm }; 1711a9947fSrtm 185051da6dSrtm #define NADDRS (NDIRECT+1) 19ea2909b6Skaashoek #define NDIRECT 12 20ea2909b6Skaashoek #define INDIRECT 12 21ea2909b6Skaashoek #define NINDIRECT (BSIZE / sizeof(uint)) 22ea2909b6Skaashoek #define MAXFILE (NDIRECT + NINDIRECT) 2311a9947fSrtm 2431085bb4Srsc // On-disk inode structure 2511a9947fSrtm struct dinode { 2631085bb4Srsc short type; // File type 2731085bb4Srsc short major; // Major device number (T_DEV only) 2831085bb4Srsc short minor; // Minor device number (T_DEV only) 2931085bb4Srsc short nlink; // Number of links to inode in file system 3031085bb4Srsc uint size; // Size of file (bytes) 3131085bb4Srsc uint addrs[NADDRS]; // Data block addresses 3211a9947fSrtm }; 33e8d11c2eSkaashoek 3431085bb4Srsc #define T_DIR 1 // Directory 3531085bb4Srsc #define T_FILE 2 // File 3631085bb4Srsc #define T_DEV 3 // Special device 3711a9947fSrtm 3831085bb4Srsc // Inodes per block. 3924111398Skaashoek #define IPB (BSIZE / sizeof(struct dinode)) 4031085bb4Srsc 4131085bb4Srsc // Block containing inode i 4231085bb4Srsc #define IBLOCK(i) ((i) / IPB + 2) 4331085bb4Srsc 4431085bb4Srsc // Bitmap bits per block 4524111398Skaashoek #define BPB (BSIZE*8) 4631085bb4Srsc 4731085bb4Srsc // Block containing bit for block b 4831085bb4Srsc #define BBLOCK(b, ninodes) (b/BPB + (ninodes)/IPB + 3) 4911a9947fSrtm 5041948359Srsc // PAGEBREAK: 10 5141948359Srsc // Directory is a file containing a sequence of dirent structures. 529d3fb671Srtm #define DIRSIZ 14 539d3fb671Srtm 5411a9947fSrtm struct dirent { 5511a9947fSrtm ushort inum; 569d3fb671Srtm char name[DIRSIZ]; 5711a9947fSrtm }; 58e958c538Skaashoek 59