فهرست منبع

Kernel: Release the paging lock while reading from the disk

Because reading from the disk may preempt, we need to release the
paging lock.
Tom 4 سال پیش
والد
کامیت
fe679de791
1فایلهای تغییر یافته به همراه8 افزوده شده و 2 حذف شده
  1. 8 2
      Kernel/VM/Region.cpp

+ 8 - 2
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<ssize_t> 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()) {