Add sync() syscall and a /bin/sync.

It walks all the live Inode objects and flushes pending metadata changes
wherever needed.

This could be optimized by keeping a separate list of dirty Inodes,
but let's not get ahead of ourselves.
This commit is contained in:
Andreas Kling 2018-12-20 00:39:29 +01:00
parent d0f06e5f3f
commit ed7ae6c02c
Notes: sideshowbarker 2024-07-19 16:07:56 +09:00
14 changed files with 78 additions and 24 deletions

View file

@ -47,13 +47,11 @@ VFS::~VFS()
auto VFS::makeNode(InodeIdentifier inode) -> RetainPtr<Vnode>
{
auto metadata = inode.metadata();
if (!metadata.isValid())
auto core_inode = inode.fs()->get_inode(inode);
if (!core_inode)
return nullptr;
auto core_inode = inode.fs()->get_inode(inode);
if (core_inode)
core_inode->m_metadata = metadata;
auto& metadata = core_inode->metadata();
InterruptDisabler disabler;
@ -501,3 +499,8 @@ void VFS::for_each_mount(Function<void(const Mount&)> callback) const
callback(*mount);
}
}
void VFS::sync()
{
FS::sync();
}