فهرست منبع

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.
creator1creeper1 3 سال پیش
والد
کامیت
ad480ff18b

+ 4 - 4
Kernel/Memory/InodeVMObject.cpp

@@ -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)
 {

+ 2 - 2
Kernel/Memory/InodeVMObject.h

@@ -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;

+ 2 - 2
Kernel/Memory/PrivateInodeVMObject.cpp

@@ -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())
 {
 }
 

+ 2 - 2
Kernel/Memory/SharedInodeVMObject.cpp

@@ -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())
 {
 }