131085bb4Srsc // On-disk file system format. 28e88f9e2Srtm // Both the kernel and user programs use this header file. 331085bb4Srsc 411a9947fSrtm 52ce40d70Srtm #define ROOTINO 1 // root i-number 6de4af193SFrans Kaashoek #define BSIZE 512 // block size 724111398Skaashoek 88320d61bSFrans Kaashoek // Disk layout: 9*b7fed77bSFrans Kaashoek // [ boot block | super block | log | inode blocks | 10*b7fed77bSFrans Kaashoek // free bit map | data blocks] 118320d61bSFrans Kaashoek // 12*b7fed77bSFrans Kaashoek // mkfs computes the super block and builds an initial file system. The 13*b7fed77bSFrans Kaashoek // super block describes the disk layout: 1411a9947fSrtm struct superblock { 15d911d83cSrsc uint size; // Size of file system image (blocks) 16d911d83cSrsc uint nblocks; // Number of data blocks 1731085bb4Srsc uint ninodes; // Number of inodes. 1813a96baeSFrans Kaashoek uint nlog; // Number of log blocks 198320d61bSFrans Kaashoek uint logstart; // Block number of first log block 208320d61bSFrans Kaashoek uint inodestart; // Block number of first inode block 218320d61bSFrans Kaashoek uint bmapstart; // Block number of first free map block 2211a9947fSrtm }; 2311a9947fSrtm 24ea2909b6Skaashoek #define NDIRECT 12 25ea2909b6Skaashoek #define NINDIRECT (BSIZE / sizeof(uint)) 26ea2909b6Skaashoek #define MAXFILE (NDIRECT + NINDIRECT) 2711a9947fSrtm 2831085bb4Srsc // On-disk inode structure 2911a9947fSrtm struct dinode { 3031085bb4Srsc short type; // File type 3131085bb4Srsc short major; // Major device number (T_DEV only) 3231085bb4Srsc short minor; // Minor device number (T_DEV only) 3331085bb4Srsc short nlink; // Number of links to inode in file system 3431085bb4Srsc uint size; // Size of file (bytes) 35ba6cd8a6Srsc uint addrs[NDIRECT+1]; // Data block addresses 3611a9947fSrtm }; 37e8d11c2eSkaashoek 3831085bb4Srsc // Inodes per block. 3924111398Skaashoek #define IPB (BSIZE / sizeof(struct dinode)) 4031085bb4Srsc 4131085bb4Srsc // Block containing inode i 428320d61bSFrans Kaashoek #define IBLOCK(i, sb) ((i) / IPB + sb.inodestart) 4331085bb4Srsc 4431085bb4Srsc // Bitmap bits per block 4524111398Skaashoek #define BPB (BSIZE*8) 4631085bb4Srsc 478320d61bSFrans Kaashoek // Block of free map containing bit for block b 488320d61bSFrans Kaashoek #define BBLOCK(b, sb) (b/BPB + sb.bmapstart) 4911a9947fSrtm 5041948359Srsc // Directory is a file containing a sequence of dirent structures. 519d3fb671Srtm #define DIRSIZ 14 529d3fb671Srtm 5311a9947fSrtm struct dirent { 5411a9947fSrtm ushort inum; 559d3fb671Srtm char name[DIRSIZ]; 5611a9947fSrtm }; 57e958c538Skaashoek 58