[NTOSKRNL] Drop the always running thread for lazy writer.
authorPierre Schweitzer <pierre@reactos.org>
Wed, 7 Feb 2018 17:10:59 +0000 (18:10 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Wed, 7 Feb 2018 20:37:17 +0000 (21:37 +0100)
commit7e550edb2638b7f59785659559d4431c85d3ceda
tree9ed8e8441f889af6f00634bdfb52d6d4db00e9a9
parent3b147adafb8eaf3568e0fbfbb69350d4947d0a00
[NTOSKRNL] Drop the always running thread for lazy writer.
Instead move to a threading model like the Windows one.
We'll queue several work items to be executed in a system thread (Cc worker)
when there are VACB that have been marked as dirty. Furthermore, some delay
will be observed before action to avoid killing the system with IOs.
This new threading model opens way for read ahead and write behind implementation.

Also, moved the initialization of the lazy writer to CcInitializeCacheManager()
it has nothing to do with views and shouldn't be initialized there.

Also, moved the lazy writer implementation to its own file.

Modified CcDeferWrite() and CcRosMarkDirtyVacb() to take into account the new threading model.

Introduced new functions:
- CcPostWorkQueue(): post an item to be handled by Cc worker and spawn a worker if required
- CcScanDpc(): called after some time (not to have lazy writer always running) to queue a lazy scan
- CcLazyWriteScan(): the lazy writer we used to have
- CcScheduleLazyWriteScan(): function to call when you want to start a lazy writer run. It will make a DPC after some time and queue execution
- CcWorkerThread(): the worker thread that will handle lazy write, read ahead, and so on
ntoskrnl/cache/newcc.h
ntoskrnl/cc/cacheman.c
ntoskrnl/cc/copy.c
ntoskrnl/cc/lazywrite.c [new file with mode: 0644]
ntoskrnl/cc/view.c
ntoskrnl/include/internal/cc.h
ntoskrnl/ntos.cmake