Reverted latest changes.
[reactos.git] / reactos / ntoskrnl / cc / misc.c
1 /* INCLUDES ******************************************************************/
2
3 #include <ddk/ntddk.h>
4 #include <ddk/ntifs.h>
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>
10
11 #define NDEBUG
12 #include <internal/debug.h>
13
14 /* GLOBALS *******************************************************************/
15
16 /* FUNCTIONS *****************************************************************/
17
18 /**********************************************************************
19 * NAME INTERNAL
20 * CcMdlReadCompleteDev@8
21 *
22 * DESCRIPTION
23 *
24 * ARGUMENTS
25 * MdlChain
26 * DeviceObject
27 *
28 * RETURN VALUE
29 * None.
30 *
31 * NOTE
32 * Used by CcMdlReadComplete@8 and FsRtl
33 */
34 VOID STDCALL
35 CcMdlReadCompleteDev (IN PMDL MdlChain,
36 IN PDEVICE_OBJECT DeviceObject)
37 {
38 UNIMPLEMENTED;
39 }
40
41
42 /**********************************************************************
43 * NAME EXPORTED
44 * CcMdlReadComplete@8
45 *
46 * DESCRIPTION
47 *
48 * ARGUMENTS
49 *
50 * RETURN VALUE
51 * None.
52 *
53 * NOTE
54 * From Bo Branten's ntifs.h v13.
55 */
56 VOID STDCALL
57 CcMdlReadComplete (IN PFILE_OBJECT FileObject,
58 IN PMDL MdlChain)
59 {
60 PDEVICE_OBJECT DeviceObject = NULL;
61
62 DeviceObject = IoGetRelatedDeviceObject (FileObject);
63 /* FIXME: try fast I/O first */
64 CcMdlReadCompleteDev (MdlChain,
65 DeviceObject);
66 }
67
68 VOID STDCALL
69 CcSetFileSizes (IN PFILE_OBJECT FileObject,
70 IN PCC_FILE_SIZES FileSizes)
71 {
72 KIRQL oldirql;
73 PBCB Bcb;
74 PLIST_ENTRY current_entry;
75 PCACHE_SEGMENT current;
76
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);
83
84 Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb;
85
86 KeAcquireSpinLock(&Bcb->BcbLock, &oldirql);
87
88 if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart)
89 {
90 current_entry = Bcb->BcbSegmentListHead.Flink;
91 while (current_entry != &Bcb->BcbSegmentListHead)
92 {
93 current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT,
94 BcbSegmentListEntry);
95 current_entry = current_entry->Flink;
96 if (current->FileOffset > FileSizes->AllocationSize.QuadPart)
97 {
98 CcRosFreeCacheSegment(Bcb, current);
99 }
100 }
101 }
102 Bcb->AllocationSize = FileSizes->AllocationSize;
103 Bcb->FileSize = FileSizes->FileSize;
104 KeReleaseSpinLock(&Bcb->BcbLock, oldirql);
105 }
106