From d7b33ffe426146db9b820e4a5459e60b5688581f Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 25 Aug 2024 12:07:09 -0300 Subject: [PATCH] devfs: call VOP_CREATE directly instead of using vfs_create --- kernel-src/fs/devfs.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/kernel-src/fs/devfs.c b/kernel-src/fs/devfs.c index 53cb506d..860336a8 100644 --- a/kernel-src/fs/devfs.c +++ b/kernel-src/fs/devfs.c @@ -460,10 +460,21 @@ int devfs_register(devops_t *devops, char *name, int type, int major, int minor, attr.uid = cred == NULL ? 0 : cred->euid; attr.gid = cred == NULL ? 0 : cred->egid; - vnode_t *newvnode = NULL; + vnode_t *dir = NULL; + char lastcomp[strlen(name) + 1]; + error = vfs_lookup(&dir, (vnode_t *)devfsroot, name, lastcomp, VFS_LOOKUP_PARENT); + if (error) { + slab_free(nodecache, master); + return error; + } + + vnode_t *newvnode = NULL; // the devfs node will have a reference from both the devtable and from the fs link - error = vfs_create((vnode_t *)devfsroot, name, &attr, type, &newvnode); + error = VOP_CREATE(dir, lastcomp, &attr, type, &newvnode, NULL); + + VOP_RELEASE(dir); + if (error) { MUTEX_ACQUIRE(&tablelock, false); __assert(hashtable_remove(&devtable, key, sizeof(key) == 0));