aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem/vfs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/filesystem/vfs.cpp')
-rw-r--r--kernel/src/filesystem/vfs.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 77ae015..3b3d6ff 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -89,7 +89,22 @@ namespace kernel::filesystem
auto vfs::open(std::string_view path) -> kstd::shared_ptr<dentry>
{
- return resolve_path(path);
+ auto [dentry, mount] = resolve_path_internal(path);
+ mount->increment_ref_count();
+ return dentry;
+ }
+
+ auto vfs::close(kstd::shared_ptr<dentry> const & dentry) -> operation_result
+ {
+ if (auto mount = find_mount(dentry->get_absolute_path().view()))
+ {
+ if (mount->decrement_ref_count())
+ {
+ return operation_result::success;
+ }
+ return operation_result::close_failed;
+ }
+ return operation_result::invalid_path;
}
auto vfs::do_mount(std::string_view source, std::string_view target) -> operation_result