diff --git a/Kernel/Storage/Ramdisk/Controller.cpp b/Kernel/Storage/Ramdisk/Controller.cpp index 2893c737db..d414b0ca28 100644 --- a/Kernel/Storage/Ramdisk/Controller.cpp +++ b/Kernel/Storage/Ramdisk/Controller.cpp @@ -11,9 +11,9 @@ namespace Kernel { -NonnullRefPtr RamdiskController::initialize() +ErrorOr> RamdiskController::try_initialize() { - return adopt_ref(*new RamdiskController()); + return TRY(adopt_nonnull_ref_or_enomem(new (nothrow) RamdiskController())); } bool RamdiskController::reset() diff --git a/Kernel/Storage/Ramdisk/Controller.h b/Kernel/Storage/Ramdisk/Controller.h index 4a92dce5a4..7f345990bf 100644 --- a/Kernel/Storage/Ramdisk/Controller.h +++ b/Kernel/Storage/Ramdisk/Controller.h @@ -19,7 +19,7 @@ class AsyncBlockDeviceRequest; class RamdiskController final : public StorageController { public: - static NonnullRefPtr initialize(); + static ErrorOr> try_initialize(); virtual ~RamdiskController() override; virtual LockRefPtr device(u32 index) const override; diff --git a/Kernel/Storage/StorageManagement.cpp b/Kernel/Storage/StorageManagement.cpp index 7fa774d8d2..76dd7fd826 100644 --- a/Kernel/Storage/StorageManagement.cpp +++ b/Kernel/Storage/StorageManagement.cpp @@ -444,7 +444,12 @@ UNMAP_AFTER_INIT void StorageManagement::initialize(StringView root_device, bool } // Note: Whether PCI bus is present on the system or not, always try to attach // a given ramdisk. - m_controllers.append(RamdiskController::initialize()); + auto controller = RamdiskController::try_initialize(); + if (controller.is_error()) { + dmesgln("Unable to initialize RAM controller: {}", controller.error()); + } else { + m_controllers.append(controller.release_value()); + } enumerate_storage_devices(); enumerate_disk_partitions();