1 /* INCLUDES ******************************************************************/
5 #include <internal/mm.h>
6 #include <internal/cc.h>
7 #include <internal/pool.h>
8 #include <internal/io.h>
9 #include <ntos/minmax.h>
12 #include <internal/debug.h>
14 /* GLOBALS *******************************************************************/
16 /* FUNCTIONS *****************************************************************/
18 /**********************************************************************
20 * CcMdlReadCompleteDev@8
32 * Used by CcMdlReadComplete@8 and FsRtl
35 CcMdlReadCompleteDev (IN PMDL MdlChain,
36 IN PDEVICE_OBJECT DeviceObject)
42 /**********************************************************************
54 * From Bo Branten's ntifs.h v13.
57 CcMdlReadComplete (IN PFILE_OBJECT FileObject,
60 PDEVICE_OBJECT DeviceObject = NULL;
62 DeviceObject = IoGetRelatedDeviceObject (FileObject);
63 /* FIXME: try fast I/O first */
64 CcMdlReadCompleteDev (MdlChain,
69 CcSetFileSizes (IN PFILE_OBJECT FileObject,
70 IN PCC_FILE_SIZES FileSizes)
74 PLIST_ENTRY current_entry;
75 PCACHE_SEGMENT current;
77 DPRINT("CcSetFileSizes(FileObject %x, FileSizes %x)\n",
78 FileObject, FileSizes);
79 DPRINT("AllocationSize %d, FileSize %d, ValidDataLength %d\n",
80 (ULONG)FileSizes->AllocationSize.QuadPart,
81 (ULONG)FileSizes->FileSize.QuadPart,
82 (ULONG)FileSizes->ValidDataLength.QuadPart);
84 Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb;
86 KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
88 if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart)
90 current_entry = Bcb->BcbSegmentListHead.Flink;
91 while (current_entry != &Bcb->BcbSegmentListHead)
93 current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT,
95 current_entry = current_entry->Flink;
96 if (current->FileOffset > FileSizes->AllocationSize.QuadPart)
98 KeReleaseSpinLock(&Bcb->BcbLock, oldirql);
99 CcRosFreeCacheSegment(Bcb, current);
100 KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
101 current_entry = Bcb->BcbSegmentListHead.Flink;
105 Bcb->AllocationSize = FileSizes->AllocationSize;
106 Bcb->FileSize = FileSizes->FileSize;
107 KeReleaseSpinLock(&Bcb->BcbLock, oldirql);