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];
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. */
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
VOID
CcPostDeferredWrites(VOID);
+VOID
+CcPostWorkQueue(
+ IN PWORK_QUEUE_ENTRY WorkItem,
+ IN PLIST_ENTRY WorkQueue);
+
+VOID
+CcPerformReadAhead(
+ IN PFILE_OBJECT FileObject);
+
FORCEINLINE
NTSTATUS
CcRosAcquireVacbLock(