Kernel: Move DevFS APIs towards OOM safety

This commit is contained in:
Brian Gianforcaro 2021-05-28 05:40:22 -07:00 committed by Linus Groh
parent d2d6ab40f9
commit 8f9872581b
Notes: sideshowbarker 2024-07-18 17:02:20 +09:00

View file

@ -275,13 +275,15 @@ KResultOr<NonnullRefPtr<Inode>> DevFSRootDirectoryInode::create_child(const Stri
}
if (name != "pts")
return EROFS;
auto new_directory_inode = adopt_ref(*new DevFSPtsDirectoryInode(m_parent_fs));
auto new_directory_inode = adopt_ref_if_nonnull(new DevFSPtsDirectoryInode(m_parent_fs));
if (!new_directory_inode)
return ENOMEM;
if (!m_subfolders.try_ensure_capacity(m_subfolders.size() + 1))
return ENOMEM;
if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1))
return ENOMEM;
m_subfolders.append(new_directory_inode);
m_parent_fs.m_nodes.append(new_directory_inode);
m_subfolders.append(*new_directory_inode);
m_parent_fs.m_nodes.append(*new_directory_inode);
return KResult(KSuccess);
}
if (metadata.is_symlink()) {
@ -289,14 +291,16 @@ KResultOr<NonnullRefPtr<Inode>> DevFSRootDirectoryInode::create_child(const Stri
if (link.name() == name)
return EEXIST;
}
auto new_link_inode = adopt_ref(*new DevFSLinkInode(m_parent_fs, name));
auto new_link_inode = adopt_ref_if_nonnull(new DevFSLinkInode(m_parent_fs, name));
if (!new_link_inode)
return ENOMEM;
if (!m_links.try_ensure_capacity(m_links.size() + 1))
return ENOMEM;
if (!m_parent_fs.m_nodes.try_ensure_capacity(m_parent_fs.m_nodes.size() + 1))
return ENOMEM;
m_links.append(new_link_inode);
m_parent_fs.m_nodes.append(new_link_inode);
return new_link_inode;
m_links.append(*new_link_inode);
m_parent_fs.m_nodes.append(*new_link_inode);
return new_link_inode.release_nonnull();
}
return EROFS;
}