|
@@ -15,23 +15,25 @@ ErrorOr<NonnullRefPtr<SharedInodeVMObject>> SharedInodeVMObject::try_create_with
|
|
|
size_t size = inode.size();
|
|
|
if (auto shared_vmobject = inode.shared_vmobject())
|
|
|
return shared_vmobject.release_nonnull();
|
|
|
- auto vmobject = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) SharedInodeVMObject(inode, size)));
|
|
|
+ auto new_physical_pages = TRY(VMObject::try_create_physical_pages(size));
|
|
|
+ auto vmobject = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) SharedInodeVMObject(inode, move(new_physical_pages))));
|
|
|
vmobject->inode().set_shared_vmobject(*vmobject);
|
|
|
return vmobject;
|
|
|
}
|
|
|
|
|
|
ErrorOr<NonnullRefPtr<VMObject>> SharedInodeVMObject::try_clone()
|
|
|
{
|
|
|
- return adopt_nonnull_ref_or_enomem<VMObject>(new (nothrow) SharedInodeVMObject(*this));
|
|
|
+ auto new_physical_pages = TRY(this->try_clone_physical_pages());
|
|
|
+ return adopt_nonnull_ref_or_enomem<VMObject>(new (nothrow) SharedInodeVMObject(*this, move(new_physical_pages)));
|
|
|
}
|
|
|
|
|
|
-SharedInodeVMObject::SharedInodeVMObject(Inode& inode, size_t size)
|
|
|
- : InodeVMObject(inode, VMObject::must_create_physical_pages_but_fixme_should_propagate_errors(size))
|
|
|
+SharedInodeVMObject::SharedInodeVMObject(Inode& inode, FixedArray<RefPtr<PhysicalPage>>&& new_physical_pages)
|
|
|
+ : InodeVMObject(inode, move(new_physical_pages))
|
|
|
{
|
|
|
}
|
|
|
|
|
|
-SharedInodeVMObject::SharedInodeVMObject(SharedInodeVMObject const& other)
|
|
|
- : InodeVMObject(other, other.must_clone_physical_pages_but_fixme_should_propagate_errors())
|
|
|
+SharedInodeVMObject::SharedInodeVMObject(SharedInodeVMObject const& other, FixedArray<RefPtr<PhysicalPage>>&& new_physical_pages)
|
|
|
+ : InodeVMObject(other, move(new_physical_pages))
|
|
|
{
|
|
|
}
|
|
|
|