-/* $Id: pin.c,v 1.18 2004/10/22 20:11:11 ekohl Exp $
+/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/cc/pin.c
* PURPOSE: Implements cache managers pinning interface
- * PROGRAMMER: Hartmut Birr
- * UPDATE HISTORY:
- * Created 05.10.2001
+ *
+ * PROGRAMMERS: Hartmut Birr
*/
/* INCLUDES ******************************************************************/
/* GLOBALS *******************************************************************/
-#define ROUND_DOWN(N, S) ((N) - ((N) % (S)))
-
extern NPAGED_LOOKASIDE_LIST iBcbLookasideList;
/* FUNCTIONS *****************************************************************/
NTSTATUS Status;
PINTERNAL_BCB iBcb;
ULONG ROffset;
-
- DPRINT("CcMapData(FileObject %x, FileOffset %d, Length %d, Wait %d,"
- " pBcb %x, pBuffer %x)\n", FileObject, (ULONG)FileOffset->QuadPart,
+
+ DPRINT("CcMapData(FileObject 0x%p, FileOffset %I64x, Length %d, Wait %d,"
+ " pBcb 0x%p, pBuffer 0x%p)\n", FileObject, FileOffset->QuadPart,
Length, Wait, pBcb, pBuffer);
-
+
ReadOffset = (ULONG)FileOffset->QuadPart;
Bcb = FileObject->SectionObjectPointer->SharedCacheMap;
ASSERT(Bcb);
- DPRINT("AllocationSize %d, FileSize %d\n",
- (ULONG)Bcb->AllocationSize.QuadPart,
- (ULONG)Bcb->FileSize.QuadPart);
-
+ DPRINT("AllocationSize %I64x, FileSize %I64x\n",
+ Bcb->AllocationSize.QuadPart,
+ Bcb->FileSize.QuadPart);
+
if (ReadOffset % Bcb->CacheSegmentSize + Length > Bcb->CacheSegmentSize)
{
return(FALSE);
return(FALSE);
}
}
-#if defined(__GNUC__)
- *pBuffer += ReadOffset % Bcb->CacheSegmentSize;
-#else
- {
- char* pTemp = *pBuffer;
- pTemp += ReadOffset % Bcb->CacheSegmentSize;
- *pBuffer = pTemp;
- }
-#endif
+
+ *pBuffer = (PVOID)((ULONG_PTR)(*pBuffer) + (ReadOffset % Bcb->CacheSegmentSize));
iBcb = ExAllocateFromNPagedLookasideList(&iBcbLookasideList);
if (iBcb == NULL)
{
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
- IN BOOLEAN Wait,
+ IN ULONG Flags,
OUT PVOID * Bcb
)
{
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
- IN BOOLEAN Wait,
+ IN ULONG Flags,
OUT PVOID * Bcb,
OUT PVOID * Buffer
)
{
- if (CcMapData(FileObject, FileOffset, Length, Wait, Bcb, Buffer))
+ if (CcMapData(FileObject, FileOffset, Length, Flags, Bcb, Buffer))
{
- if (CcPinMappedData(FileObject, FileOffset, Length, Wait, Bcb))
+ if (CcPinMappedData(FileObject, FileOffset, Length, Flags, Bcb))
return TRUE;
else
CcUnpinData(Bcb);
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Zero,
- IN BOOLEAN Wait,
+ IN ULONG Flags,
OUT PVOID * Bcb,
OUT PVOID * Buffer
)
* For now calling CcPinRead is better than returning error or
* just having UNIMPLEMENTED here.
*/
- return CcPinRead(FileObject, FileOffset, Length, Wait, Bcb, Buffer);
+ return CcPinRead(FileObject, FileOffset, Length, Flags, Bcb, Buffer);
}
/*
CcUnpinData (IN PVOID Bcb)
{
PINTERNAL_BCB iBcb = Bcb;
- CcRosReleaseCacheSegment(iBcb->CacheSegment->Bcb, iBcb->CacheSegment, TRUE,
+ CcRosReleaseCacheSegment(iBcb->CacheSegment->Bcb, iBcb->CacheSegment, TRUE,
iBcb->Dirty, FALSE);
if (--iBcb->RefCount == 0)
{
IoStatus->Information = 0;
if (WriteThrough)
{
- ExAcquireFastMutex(&iBcb->CacheSegment->Lock);
+ CcAcquireBrokenMutex(&iBcb->CacheSegment->Lock);
if (iBcb->CacheSegment->Dirty)
{
IoStatus->Status = CcRosFlushCacheSegment(iBcb->CacheSegment);
{
IoStatus->Status = STATUS_SUCCESS;
}
- ExReleaseFastMutex(&iBcb->CacheSegment->Lock);
+ CcReleaseBrokenMutex(&iBcb->CacheSegment->Lock);
}
else
{