[NTOSKRNL] Use the LockQueueMasterLock where appropriate
authorPierre Schweitzer <pierre@reactos.org>
Wed, 7 Feb 2018 20:35:22 +0000 (21:35 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Wed, 7 Feb 2018 20:37:17 +0000 (21:37 +0100)
ntoskrnl/cc/copy.c
ntoskrnl/cc/lazywrite.c
ntoskrnl/cc/view.c

index 7a84e23..521d90b 100644 (file)
@@ -628,6 +628,7 @@ CcDeferWrite (
     IN ULONG BytesToWrite,
     IN BOOLEAN Retrying)
 {
+    KIRQL OldIrql;
     PDEFERRED_WRITE Context;
     PFSRTL_COMMON_FCB_HEADER Fcb;
 
@@ -675,11 +676,13 @@ CcDeferWrite (
     /* Try to execute the posted writes */
     CcPostDeferredWrites();
 
-    /* FIXME: lock master */
+    /* Schedule a lazy writer run to handle deferred writes */
+    OldIrql = KeAcquireQueuedSpinLock(LockQueueMasterLock);
     if (!LazyWriter.ScanActive)
     {
         CcScheduleLazyWriteScan(FALSE);
     }
+    KeReleaseQueuedSpinLock(LockQueueMasterLock, OldIrql);
 }
 
 /*
index 4619aa8..292266d 100644 (file)
@@ -119,7 +119,6 @@ CcScanDpc(
     CcPostWorkQueue(WorkItem, &CcRegularWorkQueue);
 }
 
-/* FIXME: handle master lock */
 VOID
 CcLazyWriteScan(VOID)
 {
@@ -165,6 +164,7 @@ CcLazyWriteScan(VOID)
         CcPostDeferredWrites();
     }
 
+    /* Post items that were due for end of run */
     while (!IsListEmpty(&ToPost))
     {
         ListEntry = RemoveHeadList(&ToPost);
@@ -173,7 +173,9 @@ CcLazyWriteScan(VOID)
     }
 
     /* We're no longer active */
+    OldIrql = KeAcquireQueuedSpinLock(LockQueueMasterLock);
     LazyWriter.ScanActive = FALSE;
+    KeReleaseQueuedSpinLock(LockQueueMasterLock, OldIrql);
 }
 
 VOID CcScheduleLazyWriteScan(
index e050a33..2e8fb6c 100644 (file)
@@ -520,11 +520,13 @@ CcRosMarkDirtyVacb (
     KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldIrql);
     KeReleaseGuardedMutex(&ViewLock);
 
-    /* FIXME: lock master */
+    /* Schedule a lazy writer run to now that we have dirty VACB */
+    oldIrql = KeAcquireQueuedSpinLock(LockQueueMasterLock);
     if (!LazyWriter.ScanActive)
     {
         CcScheduleLazyWriteScan(FALSE);
     }
+    KeReleaseQueuedSpinLock(LockQueueMasterLock, oldIrql);
 }
 
 VOID