kern

view src/fs.h @ 94:b3351d018ac6

read/write superblock, get/put inode
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 11 Dec 2011 11:12:30 +0200
parents 083849df660b
children ec62cbe00b55
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 SECT_TO_BLK(x) ((x) / (BLKSZ / 512))
12 #define DEVNO(maj, min) ((((maj) & 0xff) << 8) | ((min) & 0xff))
13 #define DEV_MAJOR(dev) (((dev) >> 8) & 0xff)
14 #define DEV_MINOR(dev) ((dev) & 0xff)
17 typedef uint32_t dev_t;
18 typedef uint32_t blkid;
21 /* 20 direct blocks + 10 attributes + 2 indirect = 128 bytes per inode */
22 #define NDIRBLK 20
23 struct inode {
24 int ino;
25 int uid, gid, mode;
26 int nlink;
27 dev_t dev;
28 uint32_t atime, ctime, mtime;
29 uint32_t size;
30 blkid blk[NDIRBLK]; /* direct blocks */
31 blkid ind; /* indirect */
32 blkid dind; /* double-indirect */
33 } __attribute__((packed));
36 struct superblock {
37 uint32_t magic; /* magic number */
38 int ver; /* filesystem version */
39 int blksize; /* only BLKSZ supported at the moment */
41 /* total number of blocks */
42 unsigned int num_blocks;
43 /* inode allocation bitmap start and count */
44 blkid ibm_start;
45 unsigned int ibm_count;
46 /* inode table start and count */
47 blkid itbl_start;
48 unsigned int itbl_count;
49 /* block allocation bitmap start and count */
50 blkid bm_start;
51 unsigned int bm_count;
53 int root_ino; /* root direcotry inode number */
55 /* the following are valid only at runtime, ignored on disk */
56 uint32_t *ibm; /* in-memory inode bitmap */
57 uint32_t *bm; /* in-memory block bitmap */
58 struct inode *root; /* in-memory root inode */
60 } __attribute__((packed));
64 struct filesys {
65 struct block_device *bdev;
67 struct superblock *sb;
69 struct filesys *next;
70 };
72 /* defined in fs.c */
73 int openfs(struct filesys *fs, dev_t dev);
74 void closefs(struct filesys *fs);
75 int find_inode(const char *path);
77 /* defined in fs_sys.c */
78 int sys_mount(char *mntpt, char *devname, unsigned int flags);
79 int sys_umount(char *devname);
81 int sys_open(char *pathname, int flags, unsigned int mode);
82 int sys_close(int fd);
84 int sys_read(int fd, void *buf, int sz);
85 int sys_write(int fd, void *buf, int sz);
86 long sys_lseek(int fd, long offs, int from);
89 #endif /* FS_H_ */