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 DPRINT("Bcb 0x%.08x\n", Bcb);
88 KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
90 if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart)
92 current_entry = Bcb->BcbSegmentListHead.Flink;
93 while (current_entry != &Bcb->BcbSegmentListHead)
95 current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT,
97 current_entry = current_entry->Flink;
98 if (current->FileOffset > FileSizes->AllocationSize.QuadPart)
100 KeReleaseSpinLock(&Bcb->BcbLock, oldirql);
101 CcRosFreeCacheSegment(Bcb, current);
102 KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
103 current_entry = Bcb->BcbSegmentListHead.Flink;
107 Bcb->AllocationSize = FileSizes->AllocationSize;
108 Bcb->FileSize = FileSizes->FileSize;
109 KeReleaseSpinLock(&Bcb->BcbLock, oldirql);