kern

annotate src/fs.h @ 96:07fe6a614185

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