Kernel: Make InodeVMOBject construction OOM-aware

This commit moves the allocation of the resources required for
InodeVMObject from its constructors to the constructors of its child
classes.

We're making this change to give the child classes the chance to expose
the fallibility of the allocation.
This commit is contained in:
creator1creeper1 2022-01-12 17:59:46 +01:00 committed by Idan Horowitz
parent 3879e70447
commit ad480ff18b
Notes: sideshowbarker 2024-07-17 20:50:14 +09:00
4 changed files with 10 additions and 10 deletions

View file

@ -9,15 +9,15 @@
namespace Kernel::Memory {
InodeVMObject::InodeVMObject(Inode& inode, size_t size)
: VMObject(VMObject::must_create_physical_pages_but_fixme_should_propagate_errors(size))
InodeVMObject::InodeVMObject(Inode& inode, FixedArray<RefPtr<PhysicalPage>>&& new_physical_pages)
: VMObject(move(new_physical_pages))
, m_inode(inode)
, m_dirty_pages(page_count(), false)
{
}
InodeVMObject::InodeVMObject(InodeVMObject const& other)
: VMObject(other.must_clone_physical_pages_but_fixme_should_propagate_errors())
InodeVMObject::InodeVMObject(InodeVMObject const& other, FixedArray<RefPtr<PhysicalPage>>&& new_physical_pages)
: VMObject(move(new_physical_pages))
, m_inode(other.m_inode)
, m_dirty_pages(page_count(), false)
{

View file

@ -28,8 +28,8 @@ public:
u32 executable_mappings() const;
protected:
explicit InodeVMObject(Inode&, size_t);
explicit InodeVMObject(InodeVMObject const&);
explicit InodeVMObject(Inode&, FixedArray<RefPtr<PhysicalPage>>&&);
explicit InodeVMObject(InodeVMObject const&, FixedArray<RefPtr<PhysicalPage>>&&);
InodeVMObject& operator=(InodeVMObject const&) = delete;
InodeVMObject& operator=(InodeVMObject&&) = delete;

View file

@ -20,12 +20,12 @@ ErrorOr<NonnullRefPtr<VMObject>> PrivateInodeVMObject::try_clone()
}
PrivateInodeVMObject::PrivateInodeVMObject(Inode& inode, size_t size)
: InodeVMObject(inode, size)
: InodeVMObject(inode, VMObject::must_create_physical_pages_but_fixme_should_propagate_errors(size))
{
}
PrivateInodeVMObject::PrivateInodeVMObject(PrivateInodeVMObject const& other)
: InodeVMObject(other)
: InodeVMObject(other, other.must_clone_physical_pages_but_fixme_should_propagate_errors())
{
}

View file

@ -26,12 +26,12 @@ ErrorOr<NonnullRefPtr<VMObject>> SharedInodeVMObject::try_clone()
}
SharedInodeVMObject::SharedInodeVMObject(Inode& inode, size_t size)
: InodeVMObject(inode, size)
: InodeVMObject(inode, VMObject::must_create_physical_pages_but_fixme_should_propagate_errors(size))
{
}
SharedInodeVMObject::SharedInodeVMObject(SharedInodeVMObject const& other)
: InodeVMObject(other)
: InodeVMObject(other, other.must_clone_physical_pages_but_fixme_should_propagate_errors())
{
}