kern

view src/fs.h @ 97:8717eb590727

ok stopping with the filesystem to manage to write the article in time
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 17 Dec 2011 14:09:17 +0200
parents 07fe6a614185
children
line source
1 #ifndef FS_H_
2 #define FS_H_
4 #include <inttypes.h>
6 #define MAGIC 0xccf5ccf5
7 #define FS_VER 1
8 #define BLKSZ 1024
10 #define NAME_MAX 27 /* +1 termin. +4 ino = 32 per dirent */
11 #define PATH_MAX 256
13 #define SECT_TO_BLK(x) ((x) / (BLKSZ / 512))
15 #define DEVNO(maj, min) ((((maj) & 0xff) << 8) | ((min) & 0xff))
16 #define DEV_MAJOR(dev) (((dev) >> 8) & 0xff)
17 #define DEV_MINOR(dev) ((dev) & 0xff)
20 typedef uint32_t dev_t;
21 typedef uint32_t blkid;
24 /* 20 direct blocks + 10 attributes + 2 indirect = 128 bytes per inode */
25 #define NDIRBLK 20
26 struct inode {
27 int ino;
28 int uid, gid, mode;
29 int nlink;
30 dev_t dev;
31 uint32_t atime, ctime, mtime;
32 uint32_t size;
33 blkid blk[NDIRBLK]; /* direct blocks */
34 blkid ind; /* indirect */
35 blkid dind; /* double-indirect */
36 } __attribute__((packed));
38 struct dir_entry {
39 int ino;
40 char name[NAME_MAX + 1];
41 } __attribute__((packed));
43 struct superblock {
44 uint32_t magic; /* magic number */
45 int ver; /* filesystem version */
46 int blksize; /* only BLKSZ supported at the moment */
48 /* total number of blocks */
49 unsigned int num_blocks;
50 /* total number of inodes */
51 unsigned int num_inodes;
53 /* inode allocation bitmap start and count */
54 blkid ibm_start;
55 unsigned int ibm_count;
56 /* inode table start and count */
57 blkid itbl_start;
58 unsigned int itbl_count;
59 /* block allocation bitmap start and count */
60 blkid bm_start;
61 unsigned int bm_count;
63 int root_ino; /* root direcotry inode number */
65 /* the following are valid only at runtime, ignored on disk */
66 uint32_t *ibm; /* in-memory inode bitmap */
67 uint32_t *bm; /* in-memory block bitmap */
68 struct inode *root; /* in-memory root inode */
70 } __attribute__((packed));
74 struct filesys {
75 struct block_device *bdev;
77 struct superblock *sb;
79 void *zeroblock;
81 struct filesys *next;
82 };
84 /* defined in fs.c */
85 int openfs(struct filesys *fs, dev_t dev);
86 int mkfs(struct filesys *fs, dev_t dev);
87 void closefs(struct filesys *fs);
88 int find_inode(const char *path);
90 /* defined in fs_sys.c */
91 int sys_mount(char *mntpt, char *devname, unsigned int flags);
92 int sys_umount(char *devname);
94 int sys_open(char *pathname, int flags, unsigned int mode);
95 int sys_close(int fd);
97 int sys_read(int fd, void *buf, int sz);
98 int sys_write(int fd, void *buf, int sz);
99 long sys_lseek(int fd, long offs, int from);
102 #endif /* FS_H_ */