mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
kernel: rework init
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include <kernel/pmm.h>
|
||||
#include <kernel/vmmcache.h>
|
||||
#include <kernel/auth.h>
|
||||
#include <kernel/init.h>
|
||||
|
||||
static devnode_t *devfsroot;
|
||||
|
||||
@@ -498,6 +499,8 @@ void devfs_init() {
|
||||
__assert(hashtable_set(&devfsroot->children, devfsroot, ".", 1, true) == 0);
|
||||
}
|
||||
|
||||
INIT_ROUTINE_DEFINE(devfs, INIT_ROUTINE_FLAGS_NONE, devfs_init, vfs);
|
||||
|
||||
int devfs_getbyname(char *name, vnode_t **ret) {
|
||||
int error = vfs_lookup(ret, (vnode_t *)devfsroot, name, NULL, 0);
|
||||
if (error)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <kernel/vmmcache.h>
|
||||
#include <kernel/pipefs.h>
|
||||
#include <kernel/auth.h>
|
||||
#include <kernel/init.h>
|
||||
|
||||
#define INODE_ROOT 2
|
||||
|
||||
@@ -2010,3 +2011,5 @@ void ext2_init() {
|
||||
nodecache = slab_newcache(sizeof(ext2node_t), 0, NULL, NULL);
|
||||
__assert(nodecache);
|
||||
}
|
||||
|
||||
INIT_ROUTINE_DEFINE(ext2, INIT_ROUTINE_FLAGS_NONE, ext2_init, vfs);
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <errno.h>
|
||||
#include <kernel/abi.h>
|
||||
#include <kernel/poll.h>
|
||||
#include <kernel/init.h>
|
||||
|
||||
#define BUFFER_SIZE 16 * PAGE_SIZE
|
||||
#define PIPE_ATOMIC_SIZE 4096
|
||||
@@ -403,6 +404,8 @@ void pipefs_init() {
|
||||
__assert(nodecache);
|
||||
}
|
||||
|
||||
INIT_ROUTINE_DEFINE(pipefs, INIT_ROUTINE_FLAGS_NONE, pipefs_init, bsp_early);
|
||||
|
||||
int pipefs_newpipe(vnode_t **nodep) {
|
||||
vnode_t *vnode = slab_allocate(nodecache);
|
||||
pipenode_t *node = (pipenode_t *)vnode;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <kernel/poll.h>
|
||||
#include <kernel/sock.h>
|
||||
#include <kernel/auth.h>
|
||||
#include <kernel/init.h>
|
||||
|
||||
static scache_t *nodecache;
|
||||
static uintmax_t currentinode;
|
||||
@@ -267,6 +268,8 @@ void sockfs_init() {
|
||||
__assert(nodecache);
|
||||
}
|
||||
|
||||
INIT_ROUTINE_DEFINE(sockfs, INIT_ROUTINE_FLAGS_NONE, sockfs_init, bsp_early);
|
||||
|
||||
int sockfs_newsocket(vnode_t **nodep, socket_t *socket) {
|
||||
vnode_t *vnode = slab_allocate(nodecache);
|
||||
socketnode_t *node = (socketnode_t *)vnode;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <kernel/vmmcache.h>
|
||||
#include <kernel/pipefs.h>
|
||||
#include <kernel/auth.h>
|
||||
#include <kernel/init.h>
|
||||
|
||||
static scache_t *nodecache;
|
||||
static tmpfsnode_t *newnode(vfs_t *vfs, int type);
|
||||
@@ -598,3 +599,5 @@ void tmpfs_init() {
|
||||
nodecache = slab_newcache(sizeof(tmpfsnode_t), 0, NULL, NULL);
|
||||
__assert(nodecache);
|
||||
}
|
||||
|
||||
INIT_ROUTINE_DEFINE(tmpfs, INIT_ROUTINE_FLAGS_NONE, tmpfs_init, vfs);
|
||||
|
||||
+7
-4
@@ -11,6 +11,7 @@
|
||||
#include <kernel/block.h>
|
||||
#include <kernel/pipefs.h>
|
||||
#include <kernel/auth.h>
|
||||
#include <kernel/init.h>
|
||||
|
||||
#define PATHNAME_MAX 512
|
||||
#define MAXLINKDEPTH 64
|
||||
@@ -18,7 +19,7 @@
|
||||
static hashtable_t fstable;
|
||||
vnode_t *vfsroot;
|
||||
|
||||
static spinlock_t listlock;
|
||||
static mutex_t listlock;
|
||||
static vfs_t *vfslist;
|
||||
|
||||
static cred_t *getcred() {
|
||||
@@ -53,12 +54,14 @@ void vfs_init() {
|
||||
__assert(hashtable_init(&fstable, 20) == 0);
|
||||
vfsroot = alloc(sizeof(vnode_t));
|
||||
__assert(vfsroot);
|
||||
SPINLOCK_INIT(listlock);
|
||||
MUTEX_INIT(&listlock);
|
||||
vfsroot->type = V_TYPE_DIR;
|
||||
vfsroot->refcount = 1;
|
||||
vfsroot->ops = &vnops;
|
||||
}
|
||||
|
||||
INIT_ROUTINE_DEFINE(vfs, INIT_ROUTINE_FLAGS_NONE, vfs_init, bsp_early);
|
||||
|
||||
int vfs_register(vfsops_t *ops, char *name) {
|
||||
return hashtable_set(&fstable, ops, name, strlen(name), true);
|
||||
}
|
||||
@@ -111,12 +114,12 @@ int vfs_mount(vnode_t *backing, vnode_t *pathref, char *path, char *name, void *
|
||||
return err;
|
||||
}
|
||||
|
||||
spinlock_acquire(&listlock);
|
||||
MUTEX_ACQUIRE(&listlock);
|
||||
|
||||
vfs->next = vfslist;
|
||||
vfslist = vfs;
|
||||
|
||||
spinlock_release(&listlock);
|
||||
MUTEX_RELEASE(&listlock);
|
||||
|
||||
mounton->vfsmounted = vfs;
|
||||
vfs->nodecovered = mounton;
|
||||
|
||||
Reference in New Issue
Block a user