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 8*8320d61bSFrans Kaashoek // Disk layout: 9*8320d61bSFrans Kaashoek // [ boot block | super block | log | inode blocks | free bit map | data blocks ] 10*8320d61bSFrans Kaashoek // 11*8320d61bSFrans Kaashoek // mkfs computes the super block and builds an initial file system. The super describes 12*8320d61bSFrans Kaashoek // the disk layout: 1311a9947fSrtm struct superblock { 14d911d83cSrsc uint size; // Size of file system image (blocks) 15d911d83cSrsc uint nblocks; // Number of data blocks 1631085bb4Srsc uint ninodes; // Number of inodes. 1713a96baeSFrans Kaashoek uint nlog; // Number of log blocks 18*8320d61bSFrans Kaashoek uint logstart; // Block number of first log block 19*8320d61bSFrans Kaashoek uint inodestart; // Block number of first inode block 20*8320d61bSFrans Kaashoek uint bmapstart; // Block number of first free map block 2111a9947fSrtm }; 2211a9947fSrtm 23ea2909b6Skaashoek #define NDIRECT 12 24ea2909b6Skaashoek #define NINDIRECT (BSIZE / sizeof(uint)) 25ea2909b6Skaashoek #define MAXFILE (NDIRECT + NINDIRECT) 2611a9947fSrtm 2731085bb4Srsc // On-disk inode structure 2811a9947fSrtm struct dinode { 2931085bb4Srsc short type; // File type 3031085bb4Srsc short major; // Major device number (T_DEV only) 3131085bb4Srsc short minor; // Minor device number (T_DEV only) 3231085bb4Srsc short nlink; // Number of links to inode in file system 3331085bb4Srsc uint size; // Size of file (bytes) 34ba6cd8a6Srsc uint addrs[NDIRECT+1]; // Data block addresses 3511a9947fSrtm }; 36e8d11c2eSkaashoek 3731085bb4Srsc // Inodes per block. 3824111398Skaashoek #define IPB (BSIZE / sizeof(struct dinode)) 3931085bb4Srsc 4031085bb4Srsc // Block containing inode i 41*8320d61bSFrans Kaashoek #define IBLOCK(i, sb) ((i) / IPB + sb.inodestart) 4231085bb4Srsc 4331085bb4Srsc // Bitmap bits per block 4424111398Skaashoek #define BPB (BSIZE*8) 4531085bb4Srsc 46*8320d61bSFrans Kaashoek // Block of free map containing bit for block b 47*8320d61bSFrans Kaashoek #define BBLOCK(b, sb) (b/BPB + sb.bmapstart) 4811a9947fSrtm 4941948359Srsc // Directory is a file containing a sequence of dirent structures. 509d3fb671Srtm #define DIRSIZ 14 519d3fb671Srtm 5211a9947fSrtm struct dirent { 5311a9947fSrtm ushort inum; 549d3fb671Srtm char name[DIRSIZ]; 5511a9947fSrtm }; 56e958c538Skaashoek 57