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;
|
||||
}
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user