mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-26 14:28:49 +00:00
Reworked Inode to have a dirty bit and subclass-implemented flush_metadata().
This way we can defer disk writes as long as we like. There's no automatic flushing happening just yet.
This commit is contained in:
parent
d506c857ab
commit
1f44cd9dd9
Notes:
sideshowbarker
2024-07-19 16:08:01 +09:00
Author: https://github.com/awesomekling
Commit: 1f44cd9dd9
11 changed files with 82 additions and 58 deletions
|
@ -304,6 +304,21 @@ void Ext2FSInode::populate_metadata() const
|
|||
}
|
||||
}
|
||||
|
||||
void Ext2FSInode::flush_metadata()
|
||||
{
|
||||
m_raw_inode.i_size = m_metadata.size;
|
||||
m_raw_inode.i_mode = m_metadata.mode;
|
||||
m_raw_inode.i_uid = m_metadata.uid;
|
||||
m_raw_inode.i_gid = m_metadata.gid;
|
||||
m_raw_inode.i_links_count = m_metadata.linkCount;
|
||||
m_raw_inode.i_atime = m_metadata.atime;
|
||||
m_raw_inode.i_ctime = m_metadata.ctime;
|
||||
m_raw_inode.i_mtime = m_metadata.mtime;
|
||||
m_raw_inode.i_dtime = m_metadata.dtime;
|
||||
m_raw_inode.i_blocks = m_metadata.blockCount;
|
||||
fs().write_ext2_inode(index(), m_raw_inode);
|
||||
}
|
||||
|
||||
RetainPtr<Inode> Ext2FS::get_inode(InodeIdentifier inode) const
|
||||
{
|
||||
ASSERT(inode.fsid() == id());
|
||||
|
@ -716,22 +731,6 @@ bool Ext2FS::modify_link_count(InodeIndex inode, int delta)
|
|||
return write_ext2_inode(inode, *e2inode);
|
||||
}
|
||||
|
||||
int Ext2FS::set_atime_and_mtime(InodeIdentifier inode, dword atime, dword mtime)
|
||||
{
|
||||
ASSERT(inode.fsid() == id());
|
||||
|
||||
auto e2inode = lookup_ext2_inode(inode.index());
|
||||
if (!e2inode)
|
||||
return -EIO;
|
||||
|
||||
dbgprintf("changing inode %u atime from %u to %u\n", inode.index(), e2inode->i_atime, atime);
|
||||
dbgprintf("changing inode %u mtime from %u to %u\n", inode.index(), e2inode->i_mtime, mtime);
|
||||
e2inode->i_mtime = mtime;
|
||||
e2inode->i_atime = atime;
|
||||
|
||||
return write_ext2_inode(inode.index(), *e2inode);
|
||||
}
|
||||
|
||||
bool Ext2FS::write_ext2_inode(unsigned inode, const ext2_inode& e2inode)
|
||||
{
|
||||
unsigned blockIndex;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue