diff --git a/reactos/ntoskrnl/cc/cacheman.c b/reactos/ntoskrnl/cc/cacheman.c index 5592f1c0409..4be4fa68e79 100644 --- a/reactos/ntoskrnl/cc/cacheman.c +++ b/reactos/ntoskrnl/cc/cacheman.c @@ -40,3 +40,125 @@ CcInit(VOID) { CcInitView(); } + +/* + * @unimplemented + */ +LARGE_INTEGER +STDCALL +CcGetFlushedValidData ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN BOOLEAN BcbListHeld + ) +{ + UNIMPLEMENTED; + + LARGE_INTEGER i; + i.QuadPart = 0; + return i; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcRepinBcb ( + IN PVOID Bcb + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcRemapBcb ( + IN PVOID Bcb + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcScheduleReadAhead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcSetAdditionalCacheAttributes ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN DisableReadAhead, + IN BOOLEAN DisableWriteBehind + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcSetBcbOwnerPointer ( + IN PVOID Bcb, + IN PVOID Owner + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcSetDirtyPageThreshold ( + IN PFILE_OBJECT FileObject, + IN ULONG DirtyPageThreshold + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcSetReadAheadGranularity ( + IN PFILE_OBJECT FileObject, + IN ULONG Granularity + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcUnpinRepinnedBcb ( + IN PVOID Bcb, + IN BOOLEAN WriteThrough, + IN PIO_STATUS_BLOCK IoStatus + ) +{ + UNIMPLEMENTED; +} diff --git a/reactos/ntoskrnl/cc/copy.c b/reactos/ntoskrnl/cc/copy.c index e8d7e581993..2c53f493746 100644 --- a/reactos/ntoskrnl/cc/copy.c +++ b/reactos/ntoskrnl/cc/copy.c @@ -1,4 +1,4 @@ -/* $Id: copy.c,v 1.26 2004/06/20 02:10:07 vizzini Exp $ +/* $Id: copy.c,v 1.27 2004/06/21 04:11:44 ion Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -284,7 +284,6 @@ WriteCacheSegment(PCACHE_SEGMENT CacheSeg) return(STATUS_SUCCESS); } -/* STUBS */ /* * @unimplemented @@ -300,442 +299,6 @@ CcCanIWrite ( return FALSE; } -/* - * @unimplemented - */ -VOID -STDCALL -CcDeferWrite ( - IN PFILE_OBJECT FileObject, - IN PCC_POST_DEFERRED_WRITE PostRoutine, - IN PVOID Context1, - IN PVOID Context2, - IN ULONG BytesToWrite, - IN BOOLEAN Retrying - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -BOOLEAN -STDCALL -CcFastCopyRead ( - IN PFILE_OBJECT FileObject, - IN ULONG FileOffset, - IN ULONG Length, - IN ULONG PageCount, - OUT PVOID Buffer, - OUT PIO_STATUS_BLOCK IoStatus - ) -{ - UNIMPLEMENTED; - return FALSE; -} -/* - * @unimplemented - */ -BOOLEAN -STDCALL -CcFastCopyWrite ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN PVOID Buffer - ) -{ - UNIMPLEMENTED; - return FALSE; -} -/* - * @unimplemented - */ -LARGE_INTEGER -STDCALL -CcGetDirtyPages ( - IN PVOID LogHandle, - IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine, - IN PVOID Context1, - IN PVOID Context2 - ) -{ - UNIMPLEMENTED; - - LARGE_INTEGER i; - i.QuadPart = 0; - return i; -} -/* - * @unimplemented - */ -PFILE_OBJECT -STDCALL -CcGetFileObjectFromBcb ( - IN PVOID Bcb - ) -{ - UNIMPLEMENTED; - return 0; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcInitializeCacheMap ( - IN PFILE_OBJECT FileObject, - IN PCC_FILE_SIZES FileSizes, - IN BOOLEAN PinAccess, - IN PCACHE_MANAGER_CALLBACKS CallBacks, - IN PVOID LazyWriterContext - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -BOOLEAN -STDCALL -CcIsThereDirtyData ( - IN PVPB Vpb - ) -{ - UNIMPLEMENTED; - return FALSE; -} - - -/* - * @unimplemented - */ -LARGE_INTEGER -STDCALL -CcGetLsnForFileObject ( - IN PFILE_OBJECT FileObject, - OUT PLARGE_INTEGER OldestLsn OPTIONAL - ) -{ - UNIMPLEMENTED; - - LARGE_INTEGER i; - i.QuadPart = 0; - return i; -} - -/* - * @unimplemented - */ -LARGE_INTEGER -STDCALL -CcGetFlushedValidData ( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN BOOLEAN BcbListHeld - ) -{ - UNIMPLEMENTED; - - LARGE_INTEGER i; - i.QuadPart = 0; - return i; -} - - -/* - * @unimplemented - */ -VOID -STDCALL -CcMdlRead ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - OUT PMDL * MdlChain, - OUT PIO_STATUS_BLOCK IoStatus - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcMdlWriteComplete ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN PMDL MdlChain - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcMdlWriteAbort ( - IN PFILE_OBJECT FileObject, - IN PMDL MdlChain - ) -{ - UNIMPLEMENTED; -} - - -/* - * @unimplemented - */ -BOOLEAN -STDCALL -CcPinMappedData ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - OUT PVOID * Bcb - ) -{ - UNIMPLEMENTED; - return FALSE; -} - -/* - * @unimplemented - */ -BOOLEAN -STDCALL -CcPinRead ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Wait, - OUT PVOID * Bcb, - OUT PVOID * Buffer - ) -{ - UNIMPLEMENTED; - return FALSE; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcPrepareMdlWrite ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - OUT PMDL * MdlChain, - OUT PIO_STATUS_BLOCK IoStatus - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -BOOLEAN -STDCALL -CcPreparePinWrite ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length, - IN BOOLEAN Zero, - IN BOOLEAN Wait, - OUT PVOID * Bcb, - OUT PVOID * Buffer - ) -{ - UNIMPLEMENTED; - return FALSE; -} - -/* - * @unimplemented - */ -BOOLEAN -STDCALL -CcPurgeCacheSection ( - IN PSECTION_OBJECT_POINTERS SectionObjectPointer, - IN PLARGE_INTEGER FileOffset OPTIONAL, - IN ULONG Length, - IN BOOLEAN UninitializeCacheMaps - ) -{ - UNIMPLEMENTED; - return FALSE; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcRepinBcb ( - IN PVOID Bcb - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcRemapBcb ( - IN PVOID Bcb - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcScheduleReadAhead ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER FileOffset, - IN ULONG Length - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcSetAdditionalCacheAttributes ( - IN PFILE_OBJECT FileObject, - IN BOOLEAN DisableReadAhead, - IN BOOLEAN DisableWriteBehind - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcSetBcbOwnerPointer ( - IN PVOID Bcb, - IN PVOID Owner - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcSetDirtyPageThreshold ( - IN PFILE_OBJECT FileObject, - IN ULONG DirtyPageThreshold - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcSetLogHandleForFile ( - IN PFILE_OBJECT FileObject, - IN PVOID LogHandle, - IN PFLUSH_TO_LSN FlushToLsnRoutine - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcSetReadAheadGranularity ( - IN PFILE_OBJECT FileObject, - IN ULONG Granularity - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -BOOLEAN -STDCALL -CcUninitializeCacheMap ( - IN PFILE_OBJECT FileObject, - IN PLARGE_INTEGER TruncateSize OPTIONAL, - IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL - ) -{ - UNIMPLEMENTED; - return FALSE; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcUnpinDataForThread ( - IN PVOID Bcb, - IN ERESOURCE_THREAD ResourceThreadId - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -VOID -STDCALL -CcUnpinRepinnedBcb ( - IN PVOID Bcb, - IN BOOLEAN WriteThrough, - IN PIO_STATUS_BLOCK IoStatus - ) -{ - UNIMPLEMENTED; -} - -/* - * @unimplemented - */ -NTSTATUS -STDCALL -CcWaitForCurrentLazyWriterActivity ( - VOID - ) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} - -/* STUBS END!!! */ /* * @implemented @@ -978,6 +541,69 @@ CcCopyWrite (IN PFILE_OBJECT FileObject, return(TRUE); } +/* + * @unimplemented + */ +VOID +STDCALL +CcDeferWrite ( + IN PFILE_OBJECT FileObject, + IN PCC_POST_DEFERRED_WRITE PostRoutine, + IN PVOID Context1, + IN PVOID Context2, + IN ULONG BytesToWrite, + IN BOOLEAN Retrying + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +BOOLEAN +STDCALL +CcFastCopyRead ( + IN PFILE_OBJECT FileObject, + IN ULONG FileOffset, + IN ULONG Length, + IN ULONG PageCount, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus + ) +{ + UNIMPLEMENTED; + return FALSE; +} +/* + * @unimplemented + */ +BOOLEAN +STDCALL +CcFastCopyWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN PVOID Buffer + ) +{ + UNIMPLEMENTED; + return FALSE; +} + +/* + * @unimplemented + */ +NTSTATUS +STDCALL +CcWaitForCurrentLazyWriterActivity ( + VOID + ) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + /* * @implemented */ @@ -1139,4 +765,3 @@ CcZeroData (IN PFILE_OBJECT FileObject, } return(TRUE); } - diff --git a/reactos/ntoskrnl/cc/fs.c b/reactos/ntoskrnl/cc/fs.c new file mode 100644 index 00000000000..8e8b3d5a46c --- /dev/null +++ b/reactos/ntoskrnl/cc/fs.c @@ -0,0 +1,238 @@ +/* COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/cc/fs.c + * PURPOSE: Implements cache managers functions useful for File Systems + * PROGRAMMER: Alex Ionescu + * UPDATE HISTORY: + * Created 20/06/04 + */ + +/* INCLUDES ******************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#define NDEBUG +#include + +/* GLOBALS *****************************************************************/ + +extern FAST_MUTEX ViewLock; +extern ULONG DirtyPageCount; + +NTSTATUS CcRosInternalFreeCacheSegment(PCACHE_SEGMENT CacheSeg); + +/* FUNCTIONS *****************************************************************/ + +/* + * @unimplemented + */ +LARGE_INTEGER +STDCALL +CcGetDirtyPages ( + IN PVOID LogHandle, + IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine, + IN PVOID Context1, + IN PVOID Context2 + ) +{ + UNIMPLEMENTED; + + LARGE_INTEGER i; + i.QuadPart = 0; + return i; +} + +/* + * @unimplemented + */ +PFILE_OBJECT +STDCALL +CcGetFileObjectFromBcb ( + IN PVOID Bcb + ) +{ + UNIMPLEMENTED; + return 0; +} + +/* + * @unimplemented + */ +LARGE_INTEGER +STDCALL +CcGetLsnForFileObject ( + IN PFILE_OBJECT FileObject, + OUT PLARGE_INTEGER OldestLsn OPTIONAL + ) +{ + UNIMPLEMENTED; + + LARGE_INTEGER i; + i.QuadPart = 0; + return i; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcInitializeCacheMap ( + IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes, + IN BOOLEAN PinAccess, + IN PCACHE_MANAGER_CALLBACKS CallBacks, + IN PVOID LazyWriterContext + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +BOOLEAN +STDCALL +CcIsThereDirtyData ( + IN PVPB Vpb + ) +{ + UNIMPLEMENTED; + return FALSE; +} + +/* + * @unimplemented + */ +BOOLEAN +STDCALL +CcPurgeCacheSection ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN PLARGE_INTEGER FileOffset OPTIONAL, + IN ULONG Length, + IN BOOLEAN UninitializeCacheMaps + ) +{ + UNIMPLEMENTED; + return FALSE; +} + + +/* + * @implemented + */ +VOID STDCALL +CcSetFileSizes (IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes) +{ + KIRQL oldirql; + PBCB Bcb; + PLIST_ENTRY current_entry; + PCACHE_SEGMENT current; + LIST_ENTRY FreeListHead; + NTSTATUS Status; + + DPRINT("CcSetFileSizes(FileObject %x, FileSizes %x)\n", + FileObject, FileSizes); + DPRINT("AllocationSize %d, FileSize %d, ValidDataLength %d\n", + (ULONG)FileSizes->AllocationSize.QuadPart, + (ULONG)FileSizes->FileSize.QuadPart, + (ULONG)FileSizes->ValidDataLength.QuadPart); + + Bcb = FileObject->SectionObjectPointer->SharedCacheMap; + assert(Bcb); + + if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart) + { + InitializeListHead(&FreeListHead); + ExAcquireFastMutex(&ViewLock); + KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); + + current_entry = Bcb->BcbSegmentListHead.Flink; + while (current_entry != &Bcb->BcbSegmentListHead) + { + current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry); + current_entry = current_entry->Flink; + if (current->FileOffset > FileSizes->AllocationSize.QuadPart) + { + if (current->ReferenceCount == 0 || (current->ReferenceCount == 1 && current->Dirty)) + { + RemoveEntryList(¤t->BcbSegmentListEntry); + RemoveEntryList(¤t->CacheSegmentListEntry); + RemoveEntryList(¤t->CacheSegmentLRUListEntry); + if (current->Dirty) + { + RemoveEntryList(¤t->DirtySegmentListEntry); + DirtyPageCount -= Bcb->CacheSegmentSize / PAGE_SIZE; + } + InsertHeadList(&FreeListHead, ¤t->BcbSegmentListEntry); + } + else + { + DPRINT1("Anyone has referenced a cache segment behind the new size.\n"); + KEBUGCHECK(0); + } + } + } + + Bcb->AllocationSize = FileSizes->AllocationSize; + Bcb->FileSize = FileSizes->FileSize; + KeReleaseSpinLock(&Bcb->BcbLock, oldirql); + ExReleaseFastMutex(&ViewLock); + + current_entry = FreeListHead.Flink; + while(current_entry != &FreeListHead) + { + current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry); + current_entry = current_entry->Flink; + Status = CcRosInternalFreeCacheSegment(current); + if (!NT_SUCCESS(Status)) + { + DPRINT1("CcRosInternalFreeCacheSegment failed, status = %x\n"); + KEBUGCHECK(0); + } + } + } + else + { + KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); + Bcb->AllocationSize = FileSizes->AllocationSize; + Bcb->FileSize = FileSizes->FileSize; + KeReleaseSpinLock(&Bcb->BcbLock, oldirql); + } +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcSetLogHandleForFile ( + IN PFILE_OBJECT FileObject, + IN PVOID LogHandle, + IN PFLUSH_TO_LSN FlushToLsnRoutine + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +BOOLEAN +STDCALL +CcUninitializeCacheMap ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER TruncateSize OPTIONAL, + IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL + ) +{ + UNIMPLEMENTED; + return FALSE; +} diff --git a/reactos/ntoskrnl/cc/mdl.c b/reactos/ntoskrnl/cc/mdl.c new file mode 100644 index 00000000000..80d9550abc1 --- /dev/null +++ b/reactos/ntoskrnl/cc/mdl.c @@ -0,0 +1,135 @@ +/* COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/cc/fs.c + * PURPOSE: Implements MDL Cache Manager Functions + * PROGRAMMER: Alex Ionescu + * UPDATE HISTORY: + * Created 20/06/04 + */ + +/* INCLUDES ******************************************************************/ + +#include +#include +#include +#include +#include +#include +#include + +#define NDEBUG +#include + +/* FUNCTIONS *****************************************************************/ + +/* + * @unimplemented + */ +VOID +STDCALL +CcMdlRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + OUT PMDL * MdlChain, + OUT PIO_STATUS_BLOCK IoStatus + ) +{ + UNIMPLEMENTED; +} + +/********************************************************************** + * NAME INTERNAL + * CcMdlReadCompleteDev@8 + * + * DESCRIPTION + * + * ARGUMENTS + * MdlChain + * DeviceObject + * + * RETURN VALUE + * None. + * + * NOTE + * Used by CcMdlReadComplete@8 and FsRtl + * + */ +VOID STDCALL +CcMdlReadCompleteDev (IN PMDL MdlChain, + IN PDEVICE_OBJECT DeviceObject) +{ + UNIMPLEMENTED; +} + + +/********************************************************************** + * NAME EXPORTED + * CcMdlReadComplete@8 + * + * DESCRIPTION + * + * ARGUMENTS + * + * RETURN VALUE + * None. + * + * NOTE + * From Bo Branten's ntifs.h v13. + * + * @unimplemented + */ +VOID STDCALL +CcMdlReadComplete (IN PFILE_OBJECT FileObject, + IN PMDL MdlChain) +{ + PDEVICE_OBJECT DeviceObject = NULL; + + DeviceObject = IoGetRelatedDeviceObject (FileObject); + /* FIXME: try fast I/O first */ + CcMdlReadCompleteDev (MdlChain, + DeviceObject); +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcMdlWriteComplete ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcMdlWriteAbort ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain + ) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcPrepareMdlWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + OUT PMDL * MdlChain, + OUT PIO_STATUS_BLOCK IoStatus + ) +{ + UNIMPLEMENTED; +} diff --git a/reactos/ntoskrnl/cc/misc.c b/reactos/ntoskrnl/cc/misc.c index 53e3e68ac40..44af3c98930 100644 --- a/reactos/ntoskrnl/cc/misc.c +++ b/reactos/ntoskrnl/cc/misc.c @@ -16,147 +16,3 @@ #define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S)) #define ROUND_DOWN(N, S) (((N) % (S)) ? ROUND_UP(N, S) - S : N) -extern FAST_MUTEX ViewLock; -extern ULONG DirtyPageCount; - -NTSTATUS CcRosInternalFreeCacheSegment(PCACHE_SEGMENT CacheSeg); - -/* FUNCTIONS *****************************************************************/ - -/********************************************************************** - * NAME INTERNAL - * CcMdlReadCompleteDev@8 - * - * DESCRIPTION - * - * ARGUMENTS - * MdlChain - * DeviceObject - * - * RETURN VALUE - * None. - * - * NOTE - * Used by CcMdlReadComplete@8 and FsRtl - * - */ -VOID STDCALL -CcMdlReadCompleteDev (IN PMDL MdlChain, - IN PDEVICE_OBJECT DeviceObject) -{ - UNIMPLEMENTED; -} - - -/********************************************************************** - * NAME EXPORTED - * CcMdlReadComplete@8 - * - * DESCRIPTION - * - * ARGUMENTS - * - * RETURN VALUE - * None. - * - * NOTE - * From Bo Branten's ntifs.h v13. - * - * @unimplemented - */ -VOID STDCALL -CcMdlReadComplete (IN PFILE_OBJECT FileObject, - IN PMDL MdlChain) -{ - PDEVICE_OBJECT DeviceObject = NULL; - - DeviceObject = IoGetRelatedDeviceObject (FileObject); - /* FIXME: try fast I/O first */ - CcMdlReadCompleteDev (MdlChain, - DeviceObject); -} - -/* - * @implemented - */ -VOID STDCALL -CcSetFileSizes (IN PFILE_OBJECT FileObject, - IN PCC_FILE_SIZES FileSizes) -{ - KIRQL oldirql; - PBCB Bcb; - PLIST_ENTRY current_entry; - PCACHE_SEGMENT current; - LIST_ENTRY FreeListHead; - NTSTATUS Status; - - DPRINT("CcSetFileSizes(FileObject %x, FileSizes %x)\n", - FileObject, FileSizes); - DPRINT("AllocationSize %d, FileSize %d, ValidDataLength %d\n", - (ULONG)FileSizes->AllocationSize.QuadPart, - (ULONG)FileSizes->FileSize.QuadPart, - (ULONG)FileSizes->ValidDataLength.QuadPart); - - Bcb = FileObject->SectionObjectPointer->SharedCacheMap; - assert(Bcb); - - if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart) - { - InitializeListHead(&FreeListHead); - ExAcquireFastMutex(&ViewLock); - KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); - - current_entry = Bcb->BcbSegmentListHead.Flink; - while (current_entry != &Bcb->BcbSegmentListHead) - { - current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry); - current_entry = current_entry->Flink; - if (current->FileOffset > FileSizes->AllocationSize.QuadPart) - { - if (current->ReferenceCount == 0 || (current->ReferenceCount == 1 && current->Dirty)) - { - RemoveEntryList(¤t->BcbSegmentListEntry); - RemoveEntryList(¤t->CacheSegmentListEntry); - RemoveEntryList(¤t->CacheSegmentLRUListEntry); - if (current->Dirty) - { - RemoveEntryList(¤t->DirtySegmentListEntry); - DirtyPageCount -= Bcb->CacheSegmentSize / PAGE_SIZE; - } - InsertHeadList(&FreeListHead, ¤t->BcbSegmentListEntry); - } - else - { - DPRINT1("Anyone has referenced a cache segment behind the new size.\n"); - KEBUGCHECK(0); - } - } - } - - Bcb->AllocationSize = FileSizes->AllocationSize; - Bcb->FileSize = FileSizes->FileSize; - KeReleaseSpinLock(&Bcb->BcbLock, oldirql); - ExReleaseFastMutex(&ViewLock); - - current_entry = FreeListHead.Flink; - while(current_entry != &FreeListHead) - { - current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry); - current_entry = current_entry->Flink; - Status = CcRosInternalFreeCacheSegment(current); - if (!NT_SUCCESS(Status)) - { - DPRINT1("CcRosInternalFreeCacheSegment failed, status = %x\n"); - KEBUGCHECK(0); - } - } - } - else - { - KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); - Bcb->AllocationSize = FileSizes->AllocationSize; - Bcb->FileSize = FileSizes->FileSize; - KeReleaseSpinLock(&Bcb->BcbLock, oldirql); - } -} - diff --git a/reactos/ntoskrnl/cc/pin.c b/reactos/ntoskrnl/cc/pin.c index 7fc04460ba7..6f33c8ae63f 100644 --- a/reactos/ntoskrnl/cc/pin.c +++ b/reactos/ntoskrnl/cc/pin.c @@ -1,4 +1,4 @@ -/* $Id: pin.c,v 1.14 2003/12/30 18:52:03 fireball Exp $ +/* $Id: pin.c,v 1.15 2004/06/21 04:11:44 ion Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -113,15 +113,57 @@ CcMapData (IN PFILE_OBJECT FileObject, } /* - * @implemented + * @unimplemented */ -VOID STDCALL -CcUnpinData (IN PVOID Bcb) +BOOLEAN +STDCALL +CcPinMappedData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + OUT PVOID * Bcb + ) { - PINTERNAL_BCB iBcb = Bcb; - CcRosReleaseCacheSegment(iBcb->CacheSegment->Bcb, iBcb->CacheSegment, TRUE, - iBcb->Dirty, FALSE); - ExFreeToNPagedLookasideList(&iBcbLookasideList, iBcb); + UNIMPLEMENTED; + return FALSE; +} + +/* + * @unimplemented + */ +BOOLEAN +STDCALL +CcPinRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + OUT PVOID * Bcb, + OUT PVOID * Buffer + ) +{ + UNIMPLEMENTED; + return FALSE; +} + +/* + * @unimplemented + */ +BOOLEAN +STDCALL +CcPreparePinWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Zero, + IN BOOLEAN Wait, + OUT PVOID * Bcb, + OUT PVOID * Buffer + ) +{ + UNIMPLEMENTED; + return FALSE; } /* @@ -135,3 +177,28 @@ CcSetDirtyPinnedData (IN PVOID Bcb, iBcb->Dirty = TRUE; } + +/* + * @implemented + */ +VOID STDCALL +CcUnpinData (IN PVOID Bcb) +{ + PINTERNAL_BCB iBcb = Bcb; + CcRosReleaseCacheSegment(iBcb->CacheSegment->Bcb, iBcb->CacheSegment, TRUE, + iBcb->Dirty, FALSE); + ExFreeToNPagedLookasideList(&iBcbLookasideList, iBcb); +} + +/* + * @unimplemented + */ +VOID +STDCALL +CcUnpinDataForThread ( + IN PVOID Bcb, + IN ERESOURCE_THREAD ResourceThreadId + ) +{ + UNIMPLEMENTED; +}