From 9692ed2f93777e1060837b97687509f8a22c2b60 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Tue, 3 May 2022 20:31:50 +0200 Subject: kernel: reference count mount objects, free them on process kills --- src/kernel/vfs/mount.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/kernel/vfs/mount.c') diff --git a/src/kernel/vfs/mount.c b/src/kernel/vfs/mount.c index 423bf10..3fe192d 100644 --- a/src/kernel/vfs/mount.c +++ b/src/kernel/vfs/mount.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -9,9 +10,10 @@ struct vfs_mount *vfs_mount_seed(void) { backend->potential_handlers = 1; *mount = (struct vfs_mount){ .prev = NULL, - .prefix = "", + .prefix = NULL, .prefix_len = 0, .backend = backend, + .refs = 1, // never to be freed }; return mount; } @@ -36,3 +38,15 @@ struct vfs_mount *vfs_mount_resolve( } return top; } + +void vfs_mount_remref(struct vfs_mount *mnt) { + assert(mnt); + assert(mnt->refs > 0); + if (--(mnt->refs) > 0) return; + + struct vfs_mount *prev = mnt->prev; + kfree(mnt->prefix); + kfree(mnt); + + if (prev) vfs_mount_remref(prev); +} -- cgit v1.2.3