diff --git a/kernel-src/fs/devfs.c b/kernel-src/fs/devfs.c index 2cb0cfd4..ef09e807 100644 --- a/kernel-src/fs/devfs.c +++ b/kernel-src/fs/devfs.c @@ -218,6 +218,7 @@ int devfs_inactive(vnode_t *node) { if (devnode->master) VOP_RELEASE(master); + // only called when the master is inactive if (devnode->devops && devnode->devops->inactive) devnode->devops->inactive(devnode->attr.rdevminor); @@ -356,7 +357,7 @@ static vops_t vnops = { .link = devfs_enodev, .symlink = devfs_enodev, .readlink = devfs_enodev, - .inactive = devfs_enodev, + .inactive = devfs_inactive, .mmap = devfs_mmap, .munmap = devfs_munmap, .getdents = devfs_getdents, @@ -497,3 +498,8 @@ void devfs_remove(char *name, int major, int minor) { VOP_RELEASE(vnode); VOP_RELEASE(vnode); } + +int devfs_createdir(char *name) { + vattr_t attr = {0}; + return vfs_create((vnode_t *)devfsroot, name, &attr, V_TYPE_DIR, NULL); +} diff --git a/kernel-src/include/kernel/devfs.h b/kernel-src/include/kernel/devfs.h index 0488a60d..80e69ad4 100644 --- a/kernel-src/include/kernel/devfs.h +++ b/kernel-src/include/kernel/devfs.h @@ -17,6 +17,7 @@ #define DEV_MAJOR_URANDOM 9 #define DEV_MAJOR_NET 10 #define DEV_MAJOR_MOUSE 11 +#define DEV_MAJOR_PTY 12 typedef struct { int (*open)(int minor, vnode_t **vnode, int flags); @@ -45,5 +46,7 @@ void devfs_init(); int devfs_getnode(vnode_t *physical, int major, int minor, vnode_t **node); int devfs_register(devops_t *devops, char *name, int type, int major, int minor, mode_t mode); int devfs_getbyname(char *name, vnode_t **ret); +int devfs_createdir(char *name); +void devfs_remove(char *name, int major, int minor); #endif