mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
vfs: properly sync metadata
This commit is contained in:
@@ -2178,8 +2178,15 @@ static int ext2_mount(vfs_t **vfs, vnode_t *mountpoint, vnode_t *backing, void *
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ext2_syncfs(vfs_t *vfs) {
|
||||||
|
ext2fs_t *fs = (ext2fs_t *)vfs;
|
||||||
|
abc_sync(&fs->abc);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
static vfsops_t vfsops = {
|
static vfsops_t vfsops = {
|
||||||
.mount = ext2_mount,
|
.mount = ext2_mount,
|
||||||
|
.sync = ext2_syncfs,
|
||||||
.root = ext2_root,
|
.root = ext2_root,
|
||||||
.statfs = ext2_statfs
|
.statfs = ext2_statfs
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -136,6 +136,21 @@ int vfs_register(vfsops_t *ops, char *name) {
|
|||||||
return hashtable_set(&fstable, ops, name, strlen(name), true);
|
return hashtable_set(&fstable, ops, name, strlen(name), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int vfs_sync(void) {
|
||||||
|
int error = mm_cache_sync();
|
||||||
|
|
||||||
|
MUTEX_ACQUIRE(&listlock);
|
||||||
|
for (vfs_t *vfs = vfslist; vfs; vfs = vfs->next) {
|
||||||
|
if (vfs->ops->sync) {
|
||||||
|
int e = VFS_SYNC(vfs);
|
||||||
|
if (error == 0)
|
||||||
|
error = e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MUTEX_RELEASE(&listlock);
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
void vfs_inactive(vnode_t *vnode) {
|
void vfs_inactive(vnode_t *vnode) {
|
||||||
if (vnode->type == V_TYPE_SOCKET && vnode->socketbinding) {
|
if (vnode->type == V_TYPE_SOCKET && vnode->socketbinding) {
|
||||||
localsock_leavebinding(vnode);
|
localsock_leavebinding(vnode);
|
||||||
|
|||||||
@@ -259,6 +259,7 @@ void advlock_free(advlock_t *advlock);
|
|||||||
void vfs_init();
|
void vfs_init();
|
||||||
int vfs_mount(vnode_t *backing, vnode_t *pathref, char *path, char *name, void *data);
|
int vfs_mount(vnode_t *backing, vnode_t *pathref, char *path, char *name, void *data);
|
||||||
int vfs_register(vfsops_t *vfsops, char *name);
|
int vfs_register(vfsops_t *vfsops, char *name);
|
||||||
|
int vfs_sync(void);
|
||||||
|
|
||||||
void vfs_root_event_signal(void);
|
void vfs_root_event_signal(void);
|
||||||
int vfs_root_event_attach(void (*fn)(void *), void *ctx);
|
int vfs_root_event_attach(void (*fn)(void *), void *ctx);
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
syscallret_t syscall_sync(context_t *) {
|
syscallret_t syscall_sync(context_t *) {
|
||||||
syscallret_t ret = {0};
|
syscallret_t ret = {0};
|
||||||
mm_cache_sync();
|
ret.errno = vfs_sync();
|
||||||
|
ret.ret = ret.errno ? -1 : 0;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
name=astral
|
name=astral
|
||||||
revision=29
|
revision=30
|
||||||
from_source=astral
|
from_source=astral
|
||||||
imagedeps="build-essential nasm"
|
imagedeps="build-essential nasm"
|
||||||
hostdeps="xgcc xbinutils limine"
|
hostdeps="xgcc xbinutils limine"
|
||||||
|
|||||||
Reference in New Issue
Block a user