AquilaOS documentation
How it works, and its code
Loading...
Searching...
No Matches
minix.h
Go to the documentation of this file.
1#ifndef _MINIX_H
2#define _MINIX_H
3
4/*
5 * The minix filesystem, version 1 (with 14 or 30 character names): what
6 * Linux started on. A disk has a superblock, a bitmap of the inodes in
7 * use, a bitmap of the zones (data blocks) in use, the inode table, then
8 * the data. An inode has 7 direct zones, then a singly and a doubly
9 * indirect one; a directory is a file of fixed-size entries, an inode
10 * number and a name each. Versions 2 and 3 aren't supported.
11 */
12
13#include <core/system.h>
14#include <ds/bitmap.h>
15#include <ds/hashmap.h>
16
17#include <fs/vfs.h>
18#include <fs/vcache.h>
19#include <fs/bcache.h>
20
21#define MINIX_MAGIC 0x137F /* Minix v1, 14 char names */
22#define MINIX_MAGIC2 0x138F /* Minix v1, 30 char names */
23
24#define MINIX2_MAGIC 0x2468 /* Minix v2, 14 char names */
25#define MINIX2_MAGIC2 0x2478 /* Minix v2, 30 char names */
26
27#define MINIX3_MAGIC 0x4D5A /* Minix v3, 60 char names */
28
29#define MINIX_DIRECT_ZONES 7
30
45
62
71 uint16_t zones[9]; /* 7 direct zones, a singly and a doubly indirect one */
72};
73
78 uint8_t name[0]; /* the name follows, up to name_len bytes */
79};
80
82struct minix {
83 struct vnode *supernode; /* the device it's on */
85
86 size_t inode_size; /* an inode's size on the disk */
87 size_t dentry_size; /* a directory entry's size */
88 size_t name_len; /* the longest name (14 or 30) */
89
90 uint32_t imap_off; /* where the inode bitmap is, in bytes */
91 uint32_t zmap_off; /* where the zone bitmap is, in bytes */
92
93 struct bitmap imap; /* the inode bitmap, in memory */
94 struct bitmap zmap; /* the zone bitmap, in memory */
95
98
99 uint32_t inode_table; /* where the inode table is, in bytes */
101 size_t bs; /* the block size */
102
103 struct vcache *vcache; /* its vnodes in use, by inode number */
104 struct bcache *bcache; /* its cached blocks (indirect zones) */
105};
106
107extern struct fs minixfs;
108
109/* super.c */
110void minix_superblock_rewrite(struct minix *desc);
111
112/* a block (zone) number */
114
115/* block.c */
116blk_t minix_block_alloc(struct minix *desc);
117void minix_block_free(struct minix *desc, blk_t blk);
118ssize_t minix_block_read(struct minix *desc, blk_t blk, void *buf);
119ssize_t minix_block_write(struct minix *desc, blk_t blk, void *buf);
120int minix_bcache_get(struct minix *desc, blk_t blk, void **data);
121
122/* inode.c */
123ino_t minix_inode_alloc(struct minix *desc);
124void minix_inode_free(struct minix *desc, ino_t ino);
125int minix_inode_read(struct minix *desc, ino_t ino, struct minix_inode *ref);
126int minix_inode_write(struct minix *desc, ino_t ino, struct minix_inode *ref);
127ssize_t minix_inode_block_read(struct minix *desc, struct minix_inode *m_inode, size_t idx, void *buf);
128ssize_t minix_inode_block_write(struct minix *desc, struct minix_inode *inode, ino_t ino, size_t idx, void *buf);
129void minix_zones_free(struct minix *desc, struct minix_inode *inode, size_t from);
130
131/* dentry.c */
132uint32_t minix_dentry_find(struct minix *desc, struct minix_inode *m_inode, const char *name);
133int minix_dentry_create(struct vnode *dir, const char *name, ino_t ino, mode_t mode);
134
135/* vops.c: the vnode operations */
136ssize_t minix_read(struct vnode *inode, off_t offset, struct iobuf *io);
137ssize_t minix_write(struct vnode *inode, off_t offset, struct iobuf *io);
138
139ssize_t minix_readdir(struct vnode *dir, off_t offset, struct dirent *dirent);
140int minix_finddir(struct vnode *dir, const char *fn, struct dirent *dirent);
141
142int minix_vmknod(struct vnode *dir, const char *fn, mode_t mode, dev_t dev, struct uio *uio, struct vnode **ref);
143int minix_vget(struct vnode *super, ino_t ino, struct vnode **ref);
144int minix_trunc(struct vnode *inode, off_t len);
145
146/* minix.c: an inode's vnode, and writing a vnode back to its inode */
147int minix_inode_build(struct minix *desc, ino_t ino, struct vnode **ref);
148int minix_inode_sync(struct vnode *inode);
149
150#endif /* ! _MINIX_H */
ssize_t minix_block_write(struct minix *desc, blk_t blk, void *buf)
Writes a block to the disk.
Definition block.c:83
void minix_block_free(struct minix *desc, blk_t blk)
Frees a zone: its bit is cleared in the zone bitmap, which is written back at once,...
Definition block.c:42
ssize_t minix_block_read(struct minix *desc, blk_t blk, void *buf)
Reads a block from the disk.
Definition block.c:70
int minix_bcache_get(struct minix *desc, blk_t blk, void **data)
Gets a block from the block cache, reading it from the disk into the cache if it isn't there.
Definition block.c:97
blk_t minix_block_alloc(struct minix *desc)
Allocates a free zone: its bit is set in the zone bitmap, which is written back to the disk at once.
Definition block.c:16
uint32_t minix_dentry_find(struct minix *desc, struct minix_inode *m_inode, const char *name)
Finds the inode number of a name in a directory.
Definition dentry.c:19
int minix_dentry_create(struct vnode *dir, const char *name, ino_t ino, mode_t mode)
Adds an entry to a directory, in its first free slot.
Definition dentry.c:68
ssize_t minix_inode_block_write(struct minix *desc, struct minix_inode *inode, ino_t ino, size_t idx, void *buf)
Writes a zone of a file, allocating it and the indirect zones above it if they don't exist yet.
Definition inode.c:208
ssize_t minix_inode_block_read(struct minix *desc, struct minix_inode *m_inode, size_t idx, void *buf)
Reads a zone of a file.
Definition inode.c:141
int minix_inode_read(struct minix *desc, ino_t ino, struct minix_inode *ref)
Reads an inode from the disk.
Definition inode.c:31
int minix_inode_write(struct minix *desc, ino_t ino, struct minix_inode *ref)
Writes an inode to the disk.
Definition inode.c:63
void minix_zones_free(struct minix *desc, struct minix_inode *inode, size_t from)
Frees a file's zones, from a zone on, when the file is truncated or removed.
Definition inode.c:315
void minix_inode_free(struct minix *desc, ino_t ino)
Frees an inode: its bit is cleared in the inode bitmap, which is written back at once.
Definition inode.c:366
ino_t minix_inode_alloc(struct minix *desc)
Allocates a free inode: its bit is set in the inode bitmap, which is written back to the disk at once...
Definition inode.c:340
struct fs minixfs
Definition minix.c:265
int minix_inode_build(struct minix *desc, ino_t ino, struct vnode **ref)
Gets the vnode of an inode: the cached one if it's in use, or a new one made from the inode on the di...
Definition minix.c:30
int minix_inode_sync(struct vnode *inode)
Writes a vnode's attributes back to its inode on the disk.
Definition minix.c:87
ssize_t minix_read(struct vnode *inode, off_t offset, struct iobuf *io)
Reads from a file.
Definition vops.c:21
int minix_vget(struct vnode *super, ino_t ino, struct vnode **ref)
Gets the vnode of an inode, by its number.
Definition vops.c:363
int minix_finddir(struct vnode *dir, const char *fn, struct dirent *dirent)
Finds the entry of a directory that has a name.
Definition vops.c:324
uint32_t blk_t
Definition minix.h:113
void minix_superblock_rewrite(struct minix *desc)
Writes the in-memory copy of the superblock back to the disk.
Definition super.c:12
int minix_trunc(struct vnode *inode, off_t len)
Changes a file's length.
Definition vops.c:380
ssize_t minix_readdir(struct vnode *dir, off_t offset, struct dirent *dirent)
Reads a directory's entry at an offset; unused entries don't count.
Definition vops.c:151
int minix_vmknod(struct vnode *dir, const char *fn, mode_t mode, dev_t dev, struct uio *uio, struct vnode **ref)
Makes a node in a directory: a new inode, and an entry for it.
Definition vops.c:216
ssize_t minix_write(struct vnode *inode, off_t offset, struct iobuf *io)
Writes to a file, which grows if the write goes past its end.
Definition vops.c:75
unsigned int uint32_t
Definition stddef.h:22
unsigned char uint8_t
Definition stddef.h:20
unsigned short int uint16_t
Definition stddef.h:21
A bitmap: its blocks, and its last bit's index.
Definition bitmap.h:17
A block of the cache.
Definition blkcache.c:53
A device driver: its operations, any of which may be NULL.
Definition dev.h:28
A filesystem type.
Definition vfs.h:98
char * name
Definition vfs.h:99
An iobuf.
Definition iobuf.h:35
The superblock of minix v3, as it is on the disk (not supported).
Definition minix.h:47
uint8_t disk_version
Definition minix.h:60
uint16_t magic
Definition minix.h:57
uint16_t pad2
Definition minix.h:58
uint16_t blocksize
Definition minix.h:59
uint32_t zones
Definition minix.h:56
uint16_t log_zone_size
Definition minix.h:53
uint16_t imap_blocks
Definition minix.h:50
uint16_t zmap_blocks
Definition minix.h:51
uint16_t pad0
Definition minix.h:49
uint32_t max_size
Definition minix.h:55
uint16_t firstdatazone
Definition minix.h:52
uint16_t pad1
Definition minix.h:54
uint32_t ninodes
Definition minix.h:48
A directory entry, as it is on the disk: 0 as the inode number is an unused entry.
Definition minix.h:76
uint8_t name[0]
Definition minix.h:78
uint16_t ino
Definition minix.h:77
A minix v1 inode, as it is on the disk.
Definition minix.h:64
uint32_t mtime
Definition minix.h:68
uint8_t gid
Definition minix.h:69
uint32_t size
Definition minix.h:67
uint16_t uid
Definition minix.h:66
uint16_t mode
Definition minix.h:65
uint16_t zones[9]
Definition minix.h:71
uint8_t nlinks
Definition minix.h:70
The superblock of minix v1 and v2, as it is on the disk.
Definition minix.h:32
uint16_t magic
Definition minix.h:42
uint16_t block_size
Definition minix.h:39
uint16_t state
Definition minix.h:43
uint16_t imap_blocks
Definition minix.h:35
uint32_t max_size
Definition minix.h:41
uint16_t ninodes
Definition minix.h:33
uint16_t firstdatazone
Definition minix.h:38
uint16_t zmap_blocks
Definition minix.h:36
uint16_t nzones
Definition minix.h:34
A mounted minix filesystem.
Definition minix.h:82
int imap_dirty
Definition minix.h:96
uint32_t zmap_off
Definition minix.h:91
size_t bs
Definition minix.h:101
struct minix_superblock * superblock
Definition minix.h:84
struct vcache * vcache
Definition minix.h:103
size_t name_len
Definition minix.h:88
size_t dentry_size
Definition minix.h:87
struct vnode * supernode
Definition minix.h:83
uint32_t inode_table
Definition minix.h:99
size_t inode_size
Definition minix.h:86
struct bcache * bcache
Definition minix.h:104
int zmap_dirty
Definition minix.h:97
struct bitmap imap
Definition minix.h:93
struct bitmap zmap
Definition minix.h:94
uint32_t imap_off
Definition minix.h:90
uint32_t data_zone
Definition minix.h:100
Who does a filesystem operation: where its paths start, and its credentials and umask.
Definition vfs.h:60
A file in memory (a vnode): what its inode says, and the kernel's own state.
Definition vfs.h:113
uint16_t dev_t
Definition types.h:18
uintptr_t ino_t
Definition types.h:23
long int ssize_t
Definition types.h:12
long int off_t
Definition types.h:10
uint32_t mode_t
Definition types.h:15