[NTOS:CC]
[reactos.git] / reactos / ntoskrnl / include / internal / cc.h
index 30139ec..439ffa3 100644 (file)
@@ -108,7 +108,6 @@ typedef struct _BCB
     BOOLEAN RemoveOnClose;
     ULONG TimeStamp;
     PFILE_OBJECT FileObject;
-    ULONG CacheSegmentSize;
     LARGE_INTEGER AllocationSize;
     LARGE_INTEGER FileSize;
     PCACHE_MANAGER_CALLBACKS Callbacks;
@@ -145,8 +144,8 @@ typedef struct _CACHE_SEGMENT
     LIST_ENTRY CacheSegmentLRUListEntry;
     /* Offset in the file which this cache segment maps. */
     ULONG FileOffset;
-    /* Lock. */
-    EX_PUSH_LOCK Lock;
+    /* Mutex */
+    KMUTEX Mutex;
     /* Number of references. */
     ULONG ReferenceCount;
     /* Pointer to the BCB for the file which this cache segment maps data for. */
@@ -172,8 +171,8 @@ CcPfInitializePrefetcher(
 VOID
 NTAPI
 CcMdlReadComplete2(
-    IN PMDL MemoryDescriptorList,
-    IN PFILE_OBJECT FileObject
+    IN PFILE_OBJECT FileObject,
+    IN PMDL MemoryDescriptorList
 );
 
 VOID
@@ -203,13 +202,6 @@ VOID
 NTAPI
 CcInitView(VOID);
 
-NTSTATUS
-NTAPI
-CcRosFreeCacheSegment(
-    PBCB,
-    PCACHE_SEGMENT
-);
-
 NTSTATUS
 NTAPI
 ReadCacheSegment(PCACHE_SEGMENT CacheSeg);
@@ -261,7 +253,8 @@ NTSTATUS
 NTAPI
 CcRosFlushDirtyPages(
     ULONG Target,
-    PULONG Count
+    PULONG Count,
+    BOOLEAN Wait
 );
 
 VOID
@@ -300,7 +293,6 @@ NTSTATUS
 NTAPI
 CcRosInitializeFileCache(
     PFILE_OBJECT FileObject,
-    ULONG CacheSegmentSize,
     PCACHE_MANAGER_CALLBACKS CallBacks,
     PVOID LazyWriterContext
 );
@@ -314,3 +306,28 @@ CcRosReleaseFileCache(
 NTSTATUS
 NTAPI
 CcTryToInitializeFileCache(PFILE_OBJECT FileObject);
+
+FORCEINLINE
+BOOLEAN
+DoSegmentsIntersect(
+    _In_ ULONG Offset1,
+    _In_ ULONG Length1,
+    _In_ ULONG Offset2,
+    _In_ ULONG Length2)
+{
+    if (Offset1 + Length1 <= Offset2)
+        return FALSE;
+    if (Offset2 + Length2 <= Offset1)
+        return FALSE;
+    return TRUE;
+}
+
+FORCEINLINE
+BOOLEAN
+IsPointInSegment(
+    _In_ ULONG Offset1,
+    _In_ ULONG Length1,
+    _In_ ULONG Point)
+{
+    return DoSegmentsIntersect(Offset1, Length1, Point, 1);
+}