131085bb4Srsc // On-disk file system format. 2*8e88f9e2Srtm // 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 824111398Skaashoek #define BSIZE 512 // block size 924111398Skaashoek 1031085bb4Srsc // File system super block 1111a9947fSrtm struct superblock { 12d911d83cSrsc uint size; // Size of file system image (blocks) 13d911d83cSrsc uint nblocks; // Number of data blocks 1431085bb4Srsc 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 2331085bb4Srsc // On-disk inode structure 2411a9947fSrtm struct dinode { 2531085bb4Srsc short type; // File type 2631085bb4Srsc short major; // Major device number (T_DEV only) 2731085bb4Srsc short minor; // Minor device number (T_DEV only) 2831085bb4Srsc short nlink; // Number of links to inode in file system 2931085bb4Srsc uint size; // Size of file (bytes) 3031085bb4Srsc uint addrs[NADDRS]; // Data block addresses 3111a9947fSrtm }; 32e8d11c2eSkaashoek 3331085bb4Srsc #define T_DIR 1 // Directory 3431085bb4Srsc #define T_FILE 2 // File 3531085bb4Srsc #define T_DEV 3 // Special device 3611a9947fSrtm 3731085bb4Srsc // Inodes per block. 3824111398Skaashoek #define IPB (BSIZE / sizeof(struct dinode)) 3931085bb4Srsc 4031085bb4Srsc // Block containing inode i 4131085bb4Srsc #define IBLOCK(i) ((i) / IPB + 2) 4231085bb4Srsc 4331085bb4Srsc // Bitmap bits per block 4424111398Skaashoek #define BPB (BSIZE*8) 4531085bb4Srsc 4631085bb4Srsc // Block containing bit for block b 4731085bb4Srsc #define BBLOCK(b, ninodes) (b/BPB + (ninodes)/IPB + 3) 4811a9947fSrtm 4941948359Srsc // PAGEBREAK: 10 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