From d7c563aebd9b658422e26891401aa6d6ccd2cb3b Mon Sep 17 00:00:00 2001 From: apio Date: Thu, 18 May 2023 16:22:31 +0200 Subject: [PATCH] kernel: Add reference counting for mounts This will make sure we cannot unmount a file system while there is another one mounted inside it. --- kernel/src/fs/Mount.cpp | 7 +++++++ kernel/src/fs/Mount.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/src/fs/Mount.cpp b/kernel/src/fs/Mount.cpp index 950d492a..a62e8a62 100644 --- a/kernel/src/fs/Mount.cpp +++ b/kernel/src/fs/Mount.cpp @@ -13,7 +13,14 @@ Result> MountInode::create(SharedPtr source, S auto parent = TRY(source->find("..")); TRY(fs->set_mount_dir(parent)); + source->add_handle(); + g_mounts.append(inode.ptr()); return (SharedPtr)inode; } + +MountInode::~MountInode() +{ + m_source->remove_handle(); +} diff --git a/kernel/src/fs/Mount.h b/kernel/src/fs/Mount.h index 9cefc6f9..c239b849 100644 --- a/kernel/src/fs/Mount.h +++ b/kernel/src/fs/Mount.h @@ -137,7 +137,7 @@ class MountInode : public VFS::Inode, public LinkedListNode return m_mount_root_inode->replace_entry(inode, name); } - virtual ~MountInode() = default; + virtual ~MountInode(); private: SharedPtr m_source;