From: Pierre Schweitzer Date: Wed, 7 Feb 2018 20:35:22 +0000 (+0100) Subject: [NTOSKRNL] Use the LockQueueMasterLock where appropriate X-Git-Tag: 0.4.9-dev~68 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=323f71a5519858222d74917a0478de843e5d10d3 [NTOSKRNL] Use the LockQueueMasterLock where appropriate --- diff --git a/ntoskrnl/cc/copy.c b/ntoskrnl/cc/copy.c index 7a84e23fb9a..521d90b48e4 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 4619aa8c69a..292266d1918 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 e050a33c17e..2e8fb6c51e1 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