diff --git a/Kernel/FileSystem/Ext2FileSystem.cpp b/Kernel/FileSystem/Ext2FileSystem.cpp index 73a1c0b130..1c9c2a1e66 100644 --- a/Kernel/FileSystem/Ext2FileSystem.cpp +++ b/Kernel/FileSystem/Ext2FileSystem.cpp @@ -924,7 +924,6 @@ KResult Ext2FSInode::traverse_as_directory(Function> Ext2FS::create_inode(InodeIdentifier parent_id, return inode.release_nonnull(); } -void Ext2FSInode::populate_lookup_cache() const +bool Ext2FSInode::populate_lookup_cache() const { LOCKER(m_lock); if (!m_lookup_cache.is_empty()) - return; + return true; HashMap children; KResult result = traverse_as_directory([&children](auto& entry) { @@ -1549,17 +1548,20 @@ void Ext2FSInode::populate_lookup_cache() const return true; }); - ASSERT(result.is_success()); + if (!result.is_success()) + return false; if (!m_lookup_cache.is_empty()) - return; + return false; m_lookup_cache = move(children); + return true; } RefPtr Ext2FSInode::lookup(StringView name) { ASSERT(is_directory()); - populate_lookup_cache(); + if (!populate_lookup_cache()) + return {}; LOCKER(m_lock); auto it = m_lookup_cache.find(name.hash(), [&](auto& entry) { return entry.key == name; }); if (it != m_lookup_cache.end()) diff --git a/Kernel/FileSystem/Ext2FileSystem.h b/Kernel/FileSystem/Ext2FileSystem.h index d811ca0f8a..575c15bf6c 100644 --- a/Kernel/FileSystem/Ext2FileSystem.h +++ b/Kernel/FileSystem/Ext2FileSystem.h @@ -78,7 +78,7 @@ private: virtual KResult truncate(u64) override; bool write_directory(const Vector&); - void populate_lookup_cache() const; + bool populate_lookup_cache() const; KResult resize(u64); static u8 file_type_for_directory_entry(const ext2_dir_entry_2&);