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