vfs: properly sync metadata

This commit is contained in:
Matheus
2026-09-14 10:05:18 -03:00
parent f0dc54e027
commit 3eaca91ff1
5 changed files with 26 additions and 2 deletions
+7
View File
@@ -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
}; };
+15
View File
@@ -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);
+1
View File
@@ -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);
+2 -1
View File
@@ -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
View File
@@ -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"