From 0c6a5835f9431b2c1196cd6491607bed806bf85c Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 3 Nov 2022 20:12:50 -0400 Subject: [PATCH] ramfs: Set vnode cache in ramfs_create instead of ramfs_open. This way it will always be set even on the first creation, and avoids unnecessary sets. Fixes mmap() of newly created files. --- .../kernel/file_systems/ramfs/kernel_interface.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp index 013e1f5bd1..14f98ace4b 100644 --- a/src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/ramfs/kernel_interface.cpp @@ -843,6 +843,12 @@ ramfs_create(fs_volume* _volume, fs_vnode* _dir, const char *name, int openMode, node->SetMode(mode); node->SetUID(geteuid()); node->SetGID(getegid()); + + // set cache in vnode + struct vnode* vnode; + if (vfs_lookup_vnode(_volume->id, node->GetID(), &vnode) == B_OK) { + vfs_set_vnode_cache(vnode, file->GetCache()); + } } } // set result / cleanup on failure @@ -892,13 +898,6 @@ ramfs_open(fs_volume* _volume, fs_vnode* _node, int openMode, void** _cookie) // truncate if requested if (error == B_OK && (openMode & O_TRUNC)) error = node->SetSize(0); - // set cache in vnode - if (File *file = dynamic_cast(node)) { - struct vnode* vnode; - if (vfs_lookup_vnode(_volume->id, node->GetID(), &vnode) == B_OK) { - vfs_set_vnode_cache(vnode, file->GetCache()); - } - } NodeMTimeUpdater mTimeUpdater(node); // set result / cleanup on failure if (error == B_OK)