update for HEAD-2003021201
[reactos.git] / ntoskrnl / cc / pin.c
index c29c2b2..1df84da 100644 (file)
 
 #define ROUND_DOWN(N, S) ((N) - ((N) % (S)))
 
-/* FUNCTIONS *****************************************************************/
+extern NPAGED_LOOKASIDE_LIST iBcbLookasideList;
 
-typedef struct _INTERNAL_BCB
-{
-  PUBLIC_BCB PFCB;
-  PCACHE_SEGMENT CacheSegment;
-  BOOLEAN Dirty;
-} INTERNAL_BCB, *PINTERNAL_BCB;
+/* FUNCTIONS *****************************************************************/
 
 BOOLEAN STDCALL
 CcMapData (IN PFILE_OBJECT FileObject,
@@ -57,7 +52,8 @@ CcMapData (IN PFILE_OBJECT FileObject,
   
   ReadOffset = FileOffset->QuadPart;
   Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb;
-  
+  assert(Bcb);
+
   DPRINT("AllocationSize %d, FileSize %d\n",
          (ULONG)Bcb->AllocationSize.QuadPart,
          (ULONG)Bcb->FileSize.QuadPart);
@@ -90,12 +86,13 @@ CcMapData (IN PFILE_OBJECT FileObject,
        }
     }
   *pBuffer += ReadOffset % Bcb->CacheSegmentSize;
-  iBcb = ExAllocatePool (NonPagedPool, sizeof(INTERNAL_BCB));
+  iBcb = ExAllocateFromNPagedLookasideList(&iBcbLookasideList);
   if (iBcb == NULL)
     {
       CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE);
       return FALSE;
     }
+  memset(iBcb, 0, sizeof(INTERNAL_BCB));
   iBcb->CacheSegment = CacheSeg;
   iBcb->Dirty = FALSE;
   iBcb->PFCB.MappedLength = Length;
@@ -110,7 +107,7 @@ CcUnpinData (IN PVOID Bcb)
   PINTERNAL_BCB iBcb = Bcb;
   CcRosReleaseCacheSegment(iBcb->CacheSegment->Bcb, iBcb->CacheSegment, TRUE, 
                           iBcb->Dirty, FALSE);
-  ExFreePool(iBcb);
+  ExFreeToNPagedLookasideList(&iBcbLookasideList, iBcb);
 }
 
 VOID STDCALL
@@ -118,10 +115,6 @@ CcSetDirtyPinnedData (IN PVOID Bcb,
                      IN PLARGE_INTEGER Lsn)
 {
    PINTERNAL_BCB iBcb = Bcb;
-#if 0
    iBcb->Dirty = TRUE;
-#else
-   WriteCacheSegment(iBcb->CacheSegment);
-#endif
 }