Kernel: Make Inode::set_shared_vmobject() OOM-fallible

Allocating a WeakPtr can fail, so this let's us properly propagate said
failure.
This commit is contained in:
Idan Horowitz 2022-02-14 01:46:34 +02:00 committed by Andreas Kling
parent c620f18d8c
commit e37e4a7980
Notes: sideshowbarker 2024-07-17 18:52:11 +09:00
3 changed files with 5 additions and 4 deletions

View file

@ -130,10 +130,11 @@ ErrorOr<void> Inode::decrement_link_count()
return ENOTIMPL;
}
void Inode::set_shared_vmobject(Memory::SharedInodeVMObject& vmobject)
ErrorOr<void> Inode::set_shared_vmobject(Memory::SharedInodeVMObject& vmobject)
{
MutexLocker locker(m_inode_lock);
m_shared_vmobject = vmobject;
m_shared_vmobject = TRY(vmobject.try_make_weak_ptr<Memory::SharedInodeVMObject>());
return {};
}
RefPtr<LocalSocket> Inode::bound_socket() const

View file

@ -82,7 +82,7 @@ public:
void will_be_destroyed();
void set_shared_vmobject(Memory::SharedInodeVMObject&);
ErrorOr<void> set_shared_vmobject(Memory::SharedInodeVMObject&);
RefPtr<Memory::SharedInodeVMObject> shared_vmobject() const;
static void sync_all();

View file

@ -18,7 +18,7 @@ ErrorOr<NonnullRefPtr<SharedInodeVMObject>> SharedInodeVMObject::try_create_with
auto new_physical_pages = TRY(VMObject::try_create_physical_pages(size));
auto dirty_pages = TRY(Bitmap::try_create(new_physical_pages.size(), false));
auto vmobject = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) SharedInodeVMObject(inode, move(new_physical_pages), move(dirty_pages))));
vmobject->inode().set_shared_vmobject(*vmobject);
TRY(vmobject->inode().set_shared_vmobject(*vmobject));
return vmobject;
}