forked from Bananymous/banan-os
Kernel: Ext2FS now uses Ext2Inodes as cached values
This commit is contained in:
parent
4f4b8ada8c
commit
b890e2fc14
|
@ -69,7 +69,7 @@ namespace Kernel
|
||||||
|
|
||||||
BAN::ErrorOr<uint32_t> reserve_free_block(uint32_t primary_bgd);
|
BAN::ErrorOr<uint32_t> reserve_free_block(uint32_t primary_bgd);
|
||||||
|
|
||||||
BAN::HashMap<ino_t, BAN::RefPtr<Inode>>& inode_cache() { return m_inode_cache; }
|
BAN::HashMap<ino_t, BAN::RefPtr<Ext2Inode>>& inode_cache() { return m_inode_cache; }
|
||||||
|
|
||||||
const Ext2::Superblock& superblock() const { return m_superblock; }
|
const Ext2::Superblock& superblock() const { return m_superblock; }
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ namespace Kernel
|
||||||
BAN::RefPtr<Inode> m_root_inode;
|
BAN::RefPtr<Inode> m_root_inode;
|
||||||
BAN::Vector<uint32_t> m_superblock_backups;
|
BAN::Vector<uint32_t> m_superblock_backups;
|
||||||
|
|
||||||
BAN::HashMap<ino_t, BAN::RefPtr<Inode>> m_inode_cache;
|
BAN::HashMap<ino_t, BAN::RefPtr<Ext2Inode>> m_inode_cache;
|
||||||
|
|
||||||
BlockBufferManager m_buffer_manager;
|
BlockBufferManager m_buffer_manager;
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ namespace Kernel
|
||||||
, m_inode(inode)
|
, m_inode(inode)
|
||||||
, m_ino(ino)
|
, m_ino(ino)
|
||||||
{}
|
{}
|
||||||
static BAN::ErrorOr<BAN::RefPtr<Inode>> create(Ext2FS&, uint32_t);
|
static BAN::ErrorOr<BAN::RefPtr<Ext2Inode>> create(Ext2FS&, uint32_t);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ext2FS& m_fs;
|
Ext2FS& m_fs;
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace Kernel
|
||||||
return (m_ino - 1) / m_fs.superblock().blocks_per_group;
|
return (m_ino - 1) / m_fs.superblock().blocks_per_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<BAN::RefPtr<Inode>> Ext2Inode::create(Ext2FS& fs, uint32_t inode_ino)
|
BAN::ErrorOr<BAN::RefPtr<Ext2Inode>> Ext2Inode::create(Ext2FS& fs, uint32_t inode_ino)
|
||||||
{
|
{
|
||||||
if (fs.inode_cache().contains(inode_ino))
|
if (fs.inode_cache().contains(inode_ino))
|
||||||
return fs.inode_cache()[inode_ino];
|
return fs.inode_cache()[inode_ino];
|
||||||
|
@ -36,7 +36,7 @@ namespace Kernel
|
||||||
Ext2Inode* result_ptr = new Ext2Inode(fs, inode, inode_ino);
|
Ext2Inode* result_ptr = new Ext2Inode(fs, inode, inode_ino);
|
||||||
if (result_ptr == nullptr)
|
if (result_ptr == nullptr)
|
||||||
return BAN::Error::from_errno(ENOMEM);
|
return BAN::Error::from_errno(ENOMEM);
|
||||||
auto result = BAN::RefPtr<Inode>::adopt(result_ptr);
|
auto result = BAN::RefPtr<Ext2Inode>::adopt(result_ptr);
|
||||||
TRY(fs.inode_cache().insert(inode_ino, result));
|
TRY(fs.inode_cache().insert(inode_ino, result));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -589,7 +589,7 @@ needs_new_block:
|
||||||
const auto& entry = *(const Ext2::LinkedDirectoryEntry*)entry_addr;
|
const auto& entry = *(const Ext2::LinkedDirectoryEntry*)entry_addr;
|
||||||
BAN::StringView entry_name(entry.name, entry.name_len);
|
BAN::StringView entry_name(entry.name, entry.name_len);
|
||||||
if (entry.inode && entry_name == file_name)
|
if (entry.inode && entry_name == file_name)
|
||||||
return TRY(Ext2Inode::create(m_fs, entry.inode));
|
return BAN::RefPtr<Inode>(TRY(Ext2Inode::create(m_fs, entry.inode)));
|
||||||
entry_addr += entry.rec_len;
|
entry_addr += entry.rec_len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue