kern
diff 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 diff
1.1 --- a/src/fs.h Sun Dec 11 10:17:58 2011 +0200 1.2 +++ b/src/fs.h Sun Dec 11 11:12:30 2011 +0200 1.3 @@ -17,6 +17,22 @@ 1.4 typedef uint32_t dev_t; 1.5 typedef uint32_t blkid; 1.6 1.7 + 1.8 +/* 20 direct blocks + 10 attributes + 2 indirect = 128 bytes per inode */ 1.9 +#define NDIRBLK 20 1.10 +struct inode { 1.11 + int ino; 1.12 + int uid, gid, mode; 1.13 + int nlink; 1.14 + dev_t dev; 1.15 + uint32_t atime, ctime, mtime; 1.16 + uint32_t size; 1.17 + blkid blk[NDIRBLK]; /* direct blocks */ 1.18 + blkid ind; /* indirect */ 1.19 + blkid dind; /* double-indirect */ 1.20 +} __attribute__((packed)); 1.21 + 1.22 + 1.23 struct superblock { 1.24 uint32_t magic; /* magic number */ 1.25 int ver; /* filesystem version */ 1.26 @@ -34,33 +50,19 @@ 1.27 blkid bm_start; 1.28 unsigned int bm_count; 1.29 1.30 - int root_ino; /* root direcotry inode */ 1.31 + int root_ino; /* root direcotry inode number */ 1.32 1.33 /* the following are valid only at runtime, ignored on disk */ 1.34 uint32_t *ibm; /* in-memory inode bitmap */ 1.35 uint32_t *bm; /* in-memory block bitmap */ 1.36 + struct inode *root; /* in-memory root inode */ 1.37 1.38 } __attribute__((packed)); 1.39 1.40 1.41 -/* 20 direct blocks + 10 attributes + 2 indirect = 128 bytes per inode */ 1.42 -#define NDIRBLK 20 1.43 -struct inode { 1.44 - int ino; 1.45 - int uid, gid, mode; 1.46 - int nlink; 1.47 - dev_t dev; 1.48 - uint32_t atime, ctime, mtime; 1.49 - uint32_t size; 1.50 - blkid blk[NDIRBLK]; /* direct blocks */ 1.51 - blkid ind; /* indirect */ 1.52 - blkid dind; /* double-indirect */ 1.53 -} __attribute__((packed)); 1.54 - 1.55 1.56 struct filesys { 1.57 struct block_device *bdev; 1.58 - struct partition part; 1.59 1.60 struct superblock *sb; 1.61 1.62 @@ -69,6 +71,7 @@ 1.63 1.64 /* defined in fs.c */ 1.65 int openfs(struct filesys *fs, dev_t dev); 1.66 +void closefs(struct filesys *fs); 1.67 int find_inode(const char *path); 1.68 1.69 /* defined in fs_sys.c */