diff --git a/kernel-src/fs/devfs.c b/kernel-src/fs/devfs.c index 90a74de1..b26ad2e8 100644 --- a/kernel-src/fs/devfs.c +++ b/kernel-src/fs/devfs.c @@ -331,9 +331,7 @@ static vops_t vnops = { static void ctor(scache_t *cache, void *obj) { devnode_t *node = obj; memset(node, 0, sizeof(devnode_t)); - node->vnode.refcount = 1; - SPINLOCK_INIT(node->vnode.lock); - node->vnode.ops = &vnops; + VOP_INIT(&node->vnode, &vnops, 0, 0, NULL) node->attr.inode = ++currentinode; } diff --git a/kernel-src/fs/ext2.c b/kernel-src/fs/ext2.c index 7813f970..a4d1792b 100644 --- a/kernel-src/fs/ext2.c +++ b/kernel-src/fs/ext2.c @@ -2,6 +2,8 @@ #include #include #include +#include +#include #include #include #include diff --git a/kernel-src/fs/pipefs.c b/kernel-src/fs/pipefs.c index 9e619cca..06221104 100644 --- a/kernel-src/fs/pipefs.c +++ b/kernel-src/fs/pipefs.c @@ -234,13 +234,10 @@ static vops_t vnops = { static void ctor(scache_t *cache, void *obj) { pipenode_t *node = obj; memset(node, 0, sizeof(pipenode_t)); - node->vnode.refcount = 1; - SPINLOCK_INIT(node->vnode.lock); - node->vnode.ops = &vnops; + VOP_INIT(&node->vnode, &vnops, 0, 0, NULL); node->attr.inode = ++currentinode; EVENT_INIT(&node->writeevent); EVENT_INIT(&node->readevent); - node->vnode.type = V_TYPE_FIFO; } void pipefs_init() { diff --git a/kernel-src/fs/tmpfs.c b/kernel-src/fs/tmpfs.c index 576b789f..21695c35 100644 --- a/kernel-src/fs/tmpfs.c +++ b/kernel-src/fs/tmpfs.c @@ -530,11 +530,7 @@ static tmpfsnode_t *newnode(vfs_t *vfs, int type) { node->attr.type = type; node->attr.inode = ++((tmpfs_t *)vfs)->inodenumber; - node->vnode.type = type; - node->vnode.refcount = 1; - SPINLOCK_INIT(node->vnode.lock); - node->vnode.ops = &vnops; - node->vnode.vfs = vfs; + VOP_INIT(&node->vnode, &vnops, 0, type, vfs); return node; } diff --git a/kernel-src/include/kernel/vfs.h b/kernel-src/include/kernel/vfs.h index 2d02f370..0c65a0eb 100644 --- a/kernel-src/include/kernel/vfs.h +++ b/kernel-src/include/kernel/vfs.h @@ -1,6 +1,7 @@ #ifndef _VFS_H #define _VFS_H +#include #include #include #include @@ -57,7 +58,7 @@ typedef struct vfs_t { typedef struct vnode_t { struct vops_t *ops; - spinlock_t lock; + mutex_t lock; int refcount; int flags; int type; @@ -112,15 +113,15 @@ typedef struct vops_t { #define VOP_INIT(vn, o, f, t, v) \ (vn)->ops = o; \ - SPINLOCK_INIT((vn)->lock); \ + MUTEX_INIT(&(vn)->lock); \ (vn)->refcount = 1; \ (vn)->flags = f; \ (vn)->type = t; \ (vn)->vfs = v; \ (vn)->vfsmounted = NULL; -#define VOP_LOCK(v) spinlock_acquire(&(v)->lock) -#define VOP_UNLOCK(v) spinlock_release(&(v)->lock) +#define VOP_LOCK(v) MUTEX_ACQUIRE(&(v)->lock, false) +#define VOP_UNLOCK(v) MUTEX_RELEASE(&(v)->lock) #define VOP_OPEN(v, f, c) (*v)->ops->open(v, f, c) #define VOP_CLOSE(v, f, c) (v)->ops->close(v, f, c) diff --git a/kernel-src/include/kernel/vmm.h b/kernel-src/include/kernel/vmm.h index 6b932742..eb3b56d9 100644 --- a/kernel-src/include/kernel/vmm.h +++ b/kernel-src/include/kernel/vmm.h @@ -2,7 +2,7 @@ #define _VMM_H #include -#include +#include #include #define VMM_FLAGS_PAGESIZE 1 diff --git a/kernel-src/include/semaphore.h b/kernel-src/include/semaphore.h index 6c48196e..88a6e347 100644 --- a/kernel-src/include/semaphore.h +++ b/kernel-src/include/semaphore.h @@ -27,6 +27,4 @@ void semaphore_signal(semaphore_t *sem); bool semaphore_test(semaphore_t *sem); bool semaphore_haswaiters(semaphore_t *sem); -#include - #endif diff --git a/kernel-src/lib/semaphore.c b/kernel-src/lib/semaphore.c index c881f11f..30a5aea0 100644 --- a/kernel-src/lib/semaphore.c +++ b/kernel-src/lib/semaphore.c @@ -1,4 +1,5 @@ #include +#include #include #include