aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/mount_table.cpp
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-05-25 11:13:18 +0200
committerMarcel Braun <marcel.braun@ost.ch>2026-05-25 11:13:18 +0200
commit61d29a288334960cd9f43df91e4fd632a7f6ad66 (patch)
tree8ca81c4589ef2a2ca55a4a33527a6f12c34bd224 /kernel/src/filesystem/mount_table.cpp
parent093074d5209f2d0062be79059f5881ee051c07d0 (diff)
downloadkernel-61d29a288334960cd9f43df91e4fd632a7f6ad66.tar.xz
kernel-61d29a288334960cd9f43df91e4fd632a7f6ad66.zip
Increase reference count of source_mount when one of its files is mounted somewhere
Diffstat (limited to 'kernel/src/filesystem/mount_table.cpp')
-rw-r--r--kernel/src/filesystem/mount_table.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/kernel/src/filesystem/mount_table.cpp b/kernel/src/filesystem/mount_table.cpp
index 26828b4..af8434b 100644
--- a/kernel/src/filesystem/mount_table.cpp
+++ b/kernel/src/filesystem/mount_table.cpp
@@ -22,6 +22,11 @@ namespace kernel::filesystem
{
m_mounts.push_back(mount);
+ if (auto source_mount = mount->source_mount())
+ {
+ source_mount->increment_ref_count();
+ }
+
if (auto mount_dentry = mount->mount_dentry())
{
mount_dentry->set_flag(dentry::dentry_flags::is_mount_point);
@@ -46,7 +51,16 @@ namespace kernel::filesystem
return operation_result::has_child_mounts;
}
- mount->mount_dentry()->unset_flag(dentry::dentry_flags::is_mount_point);
+ if (auto source_mount = mount->source_mount())
+ {
+ source_mount->decrement_ref_count();
+ }
+
+ if (auto mount_dentry = mount->mount_dentry())
+ {
+ mount_dentry->unset_flag(dentry::dentry_flags::is_mount_point);
+ }
+
m_mounts.erase(mount_it);
return operation_result::removed;
}