diff options
| author | Marcel Braun <marcel.braun@ost.ch> | 2026-05-25 14:13:11 +0200 |
|---|---|---|
| committer | Marcel Braun <marcel.braun@ost.ch> | 2026-05-25 14:13:11 +0200 |
| commit | 0ab7525951b0116241f393090987bedc07a18c33 (patch) | |
| tree | fdd1d16c7de4f35dfc6d527cb9caa554e0db2c0c /kernel/src/filesystem/mount_table.cpp | |
| parent | 093074d5209f2d0062be79059f5881ee051c07d0 (diff) | |
| parent | adb1b5f2d6858097227fa610e86d1152b79d0bfa (diff) | |
| download | kernel-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_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; } |
