mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-10 21:22:53 +00:00
Ext2FS: Don't allow creating new files in removed directories
Also don't uncache inodes when they reach i_links_count==0 unless they also have no ref counts other than the +1 from the inode cache. This prevents the FS from deleting the on-disk inode too soon.
This commit is contained in:
parent
0fa38e4a4a
commit
9e54c7c17f
Notes:
sideshowbarker
2024-07-19 10:02:36 +09:00
Author: https://github.com/awesomekling
Commit: 9e54c7c17f
2 changed files with 29 additions and 1 deletions
Kernel/FileSystem
|
@ -1333,6 +1333,12 @@ RefPtr<Inode> Ext2FS::create_inode(InodeIdentifier parent_id, const String& name
|
|||
LOCKER(m_lock);
|
||||
ASSERT(parent_id.fsid() == fsid());
|
||||
auto parent_inode = get_inode(parent_id);
|
||||
ASSERT(parent_inode);
|
||||
|
||||
if (static_cast<const Ext2FSInode&>(*parent_inode).m_raw_inode.i_links_count == 0) {
|
||||
error = -ENOENT;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#ifdef EXT2_DEBUG
|
||||
dbgprintf("Ext2FS: Adding inode '%s' (mode %o) to parent directory %u:\n", name.characters(), mode, parent_inode->identifier().index());
|
||||
|
@ -1491,7 +1497,7 @@ int Ext2FSInode::decrement_link_count()
|
|||
return -EROFS;
|
||||
ASSERT(m_raw_inode.i_links_count);
|
||||
--m_raw_inode.i_links_count;
|
||||
if (m_raw_inode.i_links_count == 0)
|
||||
if (ref_count() == 1 && m_raw_inode.i_links_count == 0)
|
||||
fs().uncache_inode(index());
|
||||
set_metadata_dirty(true);
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue