From fe679de791abb06cf57cea4c39f3df18671fe6ae Mon Sep 17 00:00:00 2001 From: Tom Date: Sat, 6 Feb 2021 12:11:10 -0700 Subject: [PATCH] Kernel: Release the paging lock while reading from the disk Because reading from the disk may preempt, we need to release the paging lock. --- Kernel/VM/Region.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Kernel/VM/Region.cpp b/Kernel/VM/Region.cpp index 92d6d67394..95a8b465d4 100644 --- a/Kernel/VM/Region.cpp +++ b/Kernel/VM/Region.cpp @@ -539,8 +539,14 @@ PageFaultResponse Region::handle_inode_fault(size_t page_index_in_region, Scoped // Reading the page may block, so release the MM lock temporarily mm_lock.unlock(); - auto buffer = UserOrKernelBuffer::for_kernel_buffer(page_buffer); - auto result = inode.read_bytes(page_index_in_vmobject * PAGE_SIZE, PAGE_SIZE, buffer, nullptr); + + KResultOr result(KSuccess); + { + ScopedLockRelease release_paging_lock(vmobject().m_paging_lock); + auto buffer = UserOrKernelBuffer::for_kernel_buffer(page_buffer); + result = inode.read_bytes(page_index_in_vmobject * PAGE_SIZE, PAGE_SIZE, buffer, nullptr); + } + mm_lock.lock(); if (result.is_error()) {