[NTOSKRNL] Add the CcDataFlushes and CcDataPages counters
[reactos.git] / ntoskrnl / include / internal / cc.h
index f78e9c0..e91f1b4 100644 (file)
@@ -47,11 +47,24 @@ extern LIST_ENTRY CcDeferredWrites;
 extern KSPIN_LOCK CcDeferredWriteSpinLock;
 extern ULONG CcNumberWorkerThreads;
 extern LIST_ENTRY CcIdleWorkerThreadList;
+extern LIST_ENTRY CcExpressWorkQueue;
 extern LIST_ENTRY CcRegularWorkQueue;
 extern LIST_ENTRY CcPostTickWorkQueue;
 extern NPAGED_LOOKASIDE_LIST CcTwilightLookasideList;
 extern LARGE_INTEGER CcIdleDelay;
 
+//
+// Counters
+//
+extern ULONG CcLazyWritePages;
+extern ULONG CcLazyWriteIos;
+extern ULONG CcMapDataWait;
+extern ULONG CcMapDataNoWait;
+extern ULONG CcPinReadWait;
+extern ULONG CcPinReadNoWait;
+extern ULONG CcDataPages;
+extern ULONG CcDataFlushes;
+
 typedef struct _PF_SCENARIO_ID
 {
     WCHAR ScenName[30];
@@ -155,24 +168,34 @@ typedef struct _PFSN_PREFETCHER_GLOBALS
 
 typedef struct _ROS_SHARED_CACHE_MAP
 {
-    LIST_ENTRY CacheMapVacbListHead;
-    ULONG TimeStamp;
-    PFILE_OBJECT FileObject;
-    LARGE_INTEGER SectionSize;
-    LARGE_INTEGER FileSize;
-    BOOLEAN PinAccess;
-    PCACHE_MANAGER_CALLBACKS Callbacks;
-    PVOID LazyWriteContext;
-    KSPIN_LOCK CacheMapLock;
+    CSHORT NodeTypeCode;
+    CSHORT NodeByteSize;
     ULONG OpenCount;
+    LARGE_INTEGER FileSize;
+    LARGE_INTEGER SectionSize;
+    PFILE_OBJECT FileObject;
     ULONG DirtyPages;
     LIST_ENTRY SharedCacheMapLinks;
+    ULONG Flags;
+    PCACHE_MANAGER_CALLBACKS Callbacks;
+    PVOID LazyWriteContext;
+    LIST_ENTRY PrivateList;
     ULONG DirtyPageThreshold;
+    PRIVATE_CACHE_MAP PrivateCacheMap;
+
+    /* ROS specific */
+    LIST_ENTRY CacheMapVacbListHead;
+    ULONG TimeStamp;
+    BOOLEAN PinAccess;
+    KSPIN_LOCK CacheMapLock;
 #if DBG
     BOOLEAN Trace; /* enable extra trace output for this cache map and it's VACBs */
 #endif
 } ROS_SHARED_CACHE_MAP, *PROS_SHARED_CACHE_MAP;
 
+#define READAHEAD_DISABLED 0x1
+#define WRITEBEHIND_DISABLED 0x2
+
 typedef struct _ROS_VACB
 {
     /* Base address of the region where the view's data is mapped. */
@@ -252,9 +275,19 @@ typedef struct _WORK_QUEUE_ENTRY
     unsigned char Function;
 } WORK_QUEUE_ENTRY, *PWORK_QUEUE_ENTRY;
 
+typedef enum _WORK_QUEUE_FUNCTIONS
+{
+    ReadAhead = 1,
+    WriteBehind = 2,
+    LazyWrite = 3,
+    SetDone = 4,
+} WORK_QUEUE_FUNCTIONS, *PWORK_QUEUE_FUNCTIONS;
+
 extern LAZY_WRITER LazyWriter;
 
 #define NODE_TYPE_DEFERRED_WRITE 0x02FC
+#define NODE_TYPE_PRIVATE_MAP    0x02FE
+#define NODE_TYPE_SHARED_MAP     0x02FF
 
 VOID
 NTAPI
@@ -428,6 +461,15 @@ CcScheduleLazyWriteScan(BOOLEAN NoDelay);
 VOID
 CcPostDeferredWrites(VOID);
 
+VOID
+CcPostWorkQueue(
+    IN PWORK_QUEUE_ENTRY WorkItem,
+    IN PLIST_ENTRY WorkQueue);
+
+VOID
+CcPerformReadAhead(
+    IN PFILE_OBJECT FileObject);
+
 FORCEINLINE
 NTSTATUS
 CcRosAcquireVacbLock(