diff options
| author | Lukas Oesch <lukasoesch20@gmail.com> | 2026-05-15 16:50:55 +0200 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-05-16 11:56:07 +0200 |
| commit | 1d647adb1ba20121eeb5c8e4470f48b2e972b3d4 (patch) | |
| tree | d74522980f1853a6be0628158534c29cf48bdb1c /kernel/kapi | |
| parent | 95ff59017db74a6988f791ca9f122254dd743541 (diff) | |
| download | kernel-1d647adb1ba20121eeb5c8e4470f48b2e972b3d4.tar.xz kernel-1d647adb1ba20121eeb5c8e4470f48b2e972b3d4.zip | |
Mount can only be unmounted if no references are present, increment references on open file and decrement on close file
Diffstat (limited to 'kernel/kapi')
| -rw-r--r-- | kernel/kapi/filesystem.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 77d7eb0..1782da5 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -44,7 +44,15 @@ namespace kapi::filesystem auto close(int file_descriptor) -> int { - return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); + if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().get_file(file_descriptor)) + { + if (kernel::filesystem::vfs::get().close(open_file_descriptor->get_dentry()) == + kernel::filesystem::vfs::operation_result::success) + { + return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); + } + } + return -1; } auto read(int file_descriptor, void * buffer, size_t size) -> ssize_t |
