diff --git a/Kernel/Devices/Storage/NVMe/NVMeInterruptQueue.cpp b/Kernel/Devices/Storage/NVMe/NVMeInterruptQueue.cpp index 43780166a6..7d9924185f 100644 --- a/Kernel/Devices/Storage/NVMe/NVMeInterruptQueue.cpp +++ b/Kernel/Devices/Storage/NVMe/NVMeInterruptQueue.cpp @@ -57,7 +57,7 @@ void NVMeInterruptQueue::complete_current_request(u16 cmdid, u16 status) request_pdu.request->complete(req_result); if (request_pdu.end_io_handler) request_pdu.end_io_handler(status); - request_pdu.used = false; + request_pdu.clear(); }; // There can be submission without any request associated with it such as with @@ -87,7 +87,7 @@ void NVMeInterruptQueue::complete_current_request(u16 cmdid, u16 status) current_request->complete(AsyncDeviceRequest::OutOfMemory); if (request_pdu.end_io_handler) request_pdu.end_io_handler(status); - request_pdu.used = false; + request_pdu.clear(); } } } diff --git a/Kernel/Devices/Storage/NVMe/NVMePollQueue.cpp b/Kernel/Devices/Storage/NVMe/NVMePollQueue.cpp index 677996a492..60cb17d843 100644 --- a/Kernel/Devices/Storage/NVMe/NVMePollQueue.cpp +++ b/Kernel/Devices/Storage/NVMe/NVMePollQueue.cpp @@ -42,7 +42,7 @@ void NVMePollQueue::complete_current_request(u16 cmdid, u16 status) request_pdu.request->complete(req_result); if (request_pdu.end_io_handler) request_pdu.end_io_handler(status); - request_pdu.used = false; + request_pdu.clear(); }; // There can be submission without any request associated with it such as with diff --git a/Kernel/Devices/Storage/NVMe/NVMeQueue.h b/Kernel/Devices/Storage/NVMe/NVMeQueue.h index 0afc18518d..73eb1d621f 100644 --- a/Kernel/Devices/Storage/NVMe/NVMeQueue.h +++ b/Kernel/Devices/Storage/NVMe/NVMeQueue.h @@ -34,6 +34,12 @@ enum class QueueType { class AsyncBlockDeviceRequest; struct NVMeIO { + void clear() + { + used = false; + request = nullptr; + end_io_handler = nullptr; + } RefPtr request; bool used = false; Function end_io_handler;