https://git.reactos.org/?p=reactos.git;a=commitdiff;h=323f71a5519858222d74917a0478de843e5d10d3

commit 323f71a5519858222d74917a0478de843e5d10d3
Author:     Pierre Schweitzer <[email protected]>
AuthorDate: Wed Feb 7 21:35:22 2018 +0100
Commit:     Pierre Schweitzer <[email protected]>
CommitDate: Wed Feb 7 21:37:17 2018 +0100

    [NTOSKRNL] Use the LockQueueMasterLock where appropriate
---
 ntoskrnl/cc/copy.c      | 5 ++++-
 ntoskrnl/cc/lazywrite.c | 4 +++-
 ntoskrnl/cc/view.c      | 4 +++-
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/ntoskrnl/cc/copy.c b/ntoskrnl/cc/copy.c
index 7a84e23fb9..521d90b48e 100644
--- a/ntoskrnl/cc/copy.c
+++ b/ntoskrnl/cc/copy.c
@@ -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);
 }
 
 /*
diff --git a/ntoskrnl/cc/lazywrite.c b/ntoskrnl/cc/lazywrite.c
index 4619aa8c69..292266d191 100644
--- a/ntoskrnl/cc/lazywrite.c
+++ b/ntoskrnl/cc/lazywrite.c
@@ -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(
diff --git a/ntoskrnl/cc/view.c b/ntoskrnl/cc/view.c
index e050a33c17..2e8fb6c51e 100644
--- a/ntoskrnl/cc/view.c
+++ b/ntoskrnl/cc/view.c
@@ -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

Reply via email to