aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/mount.cpp
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-05-25 14:13:11 +0200
committerMarcel Braun <marcel.braun@ost.ch>2026-05-25 14:13:11 +0200
commit0ab7525951b0116241f393090987bedc07a18c33 (patch)
treefdd1d16c7de4f35dfc6d527cb9caa554e0db2c0c /kernel/src/filesystem/mount.cpp
parent093074d5209f2d0062be79059f5881ee051c07d0 (diff)
parentadb1b5f2d6858097227fa610e86d1152b79d0bfa (diff)
downloadkernel-0ab7525951b0116241f393090987bedc07a18c33.tar.xz
kernel-0ab7525951b0116241f393090987bedc07a18c33.zip
Merge branch 'improve-mount-reference-count' into 'develop-BA-FS26'
Increase reference count of source_mount when one of its files is mounted somewhere See merge request teachos/kernel!42
Diffstat (limited to 'kernel/src/filesystem/mount.cpp')
-rw-r--r--kernel/src/filesystem/mount.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/kernel/src/filesystem/mount.cpp b/kernel/src/filesystem/mount.cpp
index b64c370..ead7479 100644
--- a/kernel/src/filesystem/mount.cpp
+++ b/kernel/src/filesystem/mount.cpp
@@ -14,11 +14,13 @@
namespace kernel::filesystem
{
mount::mount(kstd::shared_ptr<dentry> const & mount_dentry, kstd::shared_ptr<dentry> const & root_dentry,
- kstd::shared_ptr<filesystem> const & fs, kstd::shared_ptr<mount> const & parent_mount)
+ kstd::shared_ptr<filesystem> const & fs, kstd::shared_ptr<mount> const & parent_mount,
+ kstd::shared_ptr<mount> const & source_mount)
: m_mount_dentry(mount_dentry)
, m_root_dentry(root_dentry)
, m_filesystem(fs)
, m_parent_mount(parent_mount)
+ , m_source_mount(source_mount)
, m_ref_count(0)
{
if (!m_filesystem)
@@ -56,20 +58,24 @@ namespace kernel::filesystem
return m_parent_mount;
}
+ auto mount::source_mount() const -> kstd::shared_ptr<mount>
+ {
+ return m_source_mount.lock();
+ }
+
auto mount::increment_ref_count() -> void
{
m_ref_count += 1;
}
- auto mount::decrement_ref_count() -> bool
+ auto mount::decrement_ref_count() -> void
{
if (m_ref_count == 0)
{
- return false;
+ kapi::system::panic("[FILESYSTEM] decrement_ref_count() was called but ref_count is 0");
}
m_ref_count -= 1;
- return true;
}
auto mount::is_ready_to_unmount() const -> bool