aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/include/kernel/filesystem/dentry.hpp6
-rw-r--r--kernel/src/filesystem/dentry.cpp10
2 files changed, 16 insertions, 0 deletions
diff --git a/kernel/include/kernel/filesystem/dentry.hpp b/kernel/include/kernel/filesystem/dentry.hpp
index 226f2b9..1d99a25 100644
--- a/kernel/include/kernel/filesystem/dentry.hpp
+++ b/kernel/include/kernel/filesystem/dentry.hpp
@@ -61,6 +61,12 @@ namespace kernel::filesystem
[[nodiscard]] auto get_absolute_path() const -> kstd::string;
/**
+ @brief traverse parent dentries until dentry with mount flag is found.
+ @return The found dentry.
+ */
+ [[nodiscard]] auto get_ancestor_with_mount_flag() const -> kstd::shared_ptr<dentry>;
+
+ /**
@brief Add a @p child dentry.
@param child The child dentry to add.
*/
diff --git a/kernel/src/filesystem/dentry.cpp b/kernel/src/filesystem/dentry.cpp
index a77ce23..6945a27 100644
--- a/kernel/src/filesystem/dentry.cpp
+++ b/kernel/src/filesystem/dentry.cpp
@@ -66,6 +66,16 @@ namespace kernel::filesystem
return path;
}
+ auto dentry::get_ancestor_with_mount_flag() const -> kstd::shared_ptr<dentry>
+ {
+ auto parent = m_parent;
+ while (parent && !parent->has_flag(dentry_flags::mounted))
+ {
+ parent = parent->get_parent();
+ }
+ return parent;
+ }
+
auto dentry::add_child(kstd::shared_ptr<dentry> const & child) -> void
{
m_children.push_back(child);