summaryrefslogtreecommitdiff
path: root/src/kernel/vfs/mount.c
diff options
context:
space:
mode:
authordzwdz2023-01-11 19:35:44 +0100
committerdzwdz2023-01-11 19:37:46 +0100
commitec81fa16d837f430add92b4d2ee4bd3727ca6c6d (patch)
tree43c91abe8d6a76fcec006fe67c1b585573d3662f /src/kernel/vfs/mount.c
parentc178ab5d5ca328d5b0072d54e3dc66d1b198df7b (diff)
kernel: return EPIPE when fs_waiting on a dead filesystem
Diffstat (limited to 'src/kernel/vfs/mount.c')
-rw-r--r--src/kernel/vfs/mount.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/kernel/vfs/mount.c b/src/kernel/vfs/mount.c
index aa73acb..2815bb9 100644
--- a/src/kernel/vfs/mount.c
+++ b/src/kernel/vfs/mount.c
@@ -14,8 +14,8 @@ void vfs_root_register(const char *path, void (*accept)(struct vfs_request *)) {
struct vfs_mount *mount = kmalloc(sizeof *mount);
*backend = (struct vfs_backend) {
.is_user = false,
- .potential_handlers = 1,
- .refcount = 1,
+ .usehcnt = 1,
+ .provhcnt = 1,
.kern.accept = accept,
};
*mount = (struct vfs_mount){
@@ -55,11 +55,15 @@ void vfs_mount_remref(struct vfs_mount *mnt) {
if (--(mnt->refs) > 0) return;
struct vfs_mount *prev = mnt->prev;
- if (mnt->backend)
- vfs_backend_refdown(mnt->backend);
- if (mnt->prefix_owned)
+ if (mnt->backend) {
+ vfs_backend_refdown(mnt->backend, true);
+ }
+ if (mnt->prefix_owned) {
kfree((void*)mnt->prefix);
+ }
kfree(mnt);
- if (prev) vfs_mount_remref(prev);
+ if (prev) {
+ vfs_mount_remref(prev);
+ }
}