Sfoglia il codice sorgente

Kernel/FileSystem: Mark ext2 inode lookup cache non-const

For the lookup cache, no method being declared const tried to modify it,
so it was easy to drop the mutable declaration on the HashMap member.
Liav A 3 anni fa
parent
commit
843bd43c5b

+ 3 - 3
Kernel/FileSystem/Ext2FileSystem.cpp

@@ -1499,9 +1499,9 @@ ErrorOr<NonnullLockRefPtr<Inode>> Ext2FS::create_inode(Ext2FSInode& parent_inode
     return new_inode;
 }
 
-ErrorOr<void> Ext2FSInode::populate_lookup_cache() const
+ErrorOr<void> Ext2FSInode::populate_lookup_cache()
 {
-    MutexLocker locker(m_inode_lock);
+    VERIFY(m_inode_lock.is_exclusively_locked_by_current_thread());
     if (!m_lookup_cache.is_empty())
         return {};
     HashMap<NonnullOwnPtr<KString>, InodeIndex> children;
@@ -1521,11 +1521,11 @@ ErrorOr<NonnullLockRefPtr<Inode>> Ext2FSInode::lookup(StringView name)
 {
     VERIFY(is_directory());
     dbgln_if(EXT2_DEBUG, "Ext2FSInode[{}]:lookup(): Looking up '{}'", identifier(), name);
-    TRY(populate_lookup_cache());
 
     InodeIndex inode_index;
     {
         MutexLocker locker(m_inode_lock);
+        TRY(populate_lookup_cache());
         auto it = m_lookup_cache.find(name);
         if (it == m_lookup_cache.end()) {
             dbgln_if(EXT2_DEBUG, "Ext2FSInode[{}]:lookup(): '{}' not found", identifier(), name);

+ 2 - 2
Kernel/FileSystem/Ext2FileSystem.h

@@ -53,7 +53,7 @@ private:
     virtual ErrorOr<int> get_block_address(int) override;
 
     ErrorOr<void> write_directory(Vector<Ext2FSDirectoryEntry>&);
-    ErrorOr<void> populate_lookup_cache() const;
+    ErrorOr<void> populate_lookup_cache();
     ErrorOr<void> resize(u64);
     ErrorOr<void> write_indirect_block(BlockBasedFileSystem::BlockIndex, Span<BlockBasedFileSystem::BlockIndex>);
     ErrorOr<void> grow_doubly_indirect_block(BlockBasedFileSystem::BlockIndex, size_t, Span<BlockBasedFileSystem::BlockIndex>, Vector<BlockBasedFileSystem::BlockIndex>&, unsigned&);
@@ -71,7 +71,7 @@ private:
     Ext2FSInode(Ext2FS&, InodeIndex);
 
     mutable Vector<BlockBasedFileSystem::BlockIndex> m_block_list;
-    mutable HashMap<NonnullOwnPtr<KString>, InodeIndex> m_lookup_cache;
+    HashMap<NonnullOwnPtr<KString>, InodeIndex> m_lookup_cache;
     ext2_inode m_raw_inode {};
 };