diff --git a/kernel-src/fs/ext2.c b/kernel-src/fs/ext2.c index 5a46cad7..06980ba9 100644 --- a/kernel-src/fs/ext2.c +++ b/kernel-src/fs/ext2.c @@ -2178,8 +2178,15 @@ static int ext2_mount(vfs_t **vfs, vnode_t *mountpoint, vnode_t *backing, void * 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 = { .mount = ext2_mount, + .sync = ext2_syncfs, .root = ext2_root, .statfs = ext2_statfs }; diff --git a/kernel-src/fs/vfs.c b/kernel-src/fs/vfs.c index defb9fe0..e556b366 100644 --- a/kernel-src/fs/vfs.c +++ b/kernel-src/fs/vfs.c @@ -136,6 +136,21 @@ int vfs_register(vfsops_t *ops, char *name) { 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) { if (vnode->type == V_TYPE_SOCKET && vnode->socketbinding) { localsock_leavebinding(vnode); diff --git a/kernel-src/include/kernel/vfs.h b/kernel-src/include/kernel/vfs.h index 2afd2b1f..cbb16098 100644 --- a/kernel-src/include/kernel/vfs.h +++ b/kernel-src/include/kernel/vfs.h @@ -259,6 +259,7 @@ void advlock_free(advlock_t *advlock); void vfs_init(); 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_sync(void); void vfs_root_event_signal(void); int vfs_root_event_attach(void (*fn)(void *), void *ctx); diff --git a/kernel-src/sys/syscalls/sync.c b/kernel-src/sys/syscalls/sync.c index 1c2fda32..7af46501 100644 --- a/kernel-src/sys/syscalls/sync.c +++ b/kernel-src/sys/syscalls/sync.c @@ -3,7 +3,8 @@ syscallret_t syscall_sync(context_t *) { syscallret_t ret = {0}; - mm_cache_sync(); + ret.errno = vfs_sync(); + ret.ret = ret.errno ? -1 : 0; return ret; } diff --git a/recipes/astral b/recipes/astral index a278df57..cf06e9e5 100644 --- a/recipes/astral +++ b/recipes/astral @@ -1,5 +1,5 @@ name=astral -revision=29 +revision=30 from_source=astral imagedeps="build-essential nasm" hostdeps="xgcc xbinutils limine"