xref: /xv6-public/fs.h (revision b7fed77b)
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