diff options
| author | Marcel Braun <marcel.braun@ost.ch> | 2026-05-25 11:13:18 +0200 |
|---|---|---|
| committer | Marcel Braun <marcel.braun@ost.ch> | 2026-05-25 11:13:18 +0200 |
| commit | 61d29a288334960cd9f43df91e4fd632a7f6ad66 (patch) | |
| tree | 8ca81c4589ef2a2ca55a4a33527a6f12c34bd224 /kernel/src/filesystem/mount_table.cpp | |
| parent | 093074d5209f2d0062be79059f5881ee051c07d0 (diff) | |
| download | kernel-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.cpp | 16 |
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; } |
