mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
- Pass cache manager callbacks structure at every CcInitializeCacheMap() call, it's mandatory.
svn path=/trunk/; revision=32607
This commit is contained in:
parent
778097fbec
commit
5776256730
5 changed files with 50 additions and 11 deletions
|
@ -33,7 +33,7 @@
|
|||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
/* GLOBALS ******************************************************************/
|
||||
|
||||
PCDFS_GLOBAL_DATA CdfsGlobalData;
|
||||
|
||||
|
@ -98,9 +98,41 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
|
|||
|
||||
DriverObject->DriverUnload = NULL;
|
||||
|
||||
/* Cache manager */
|
||||
CdfsGlobalData->CacheMgrCallbacks.AcquireForLazyWrite = CdfsAcquireForLazyWrite;
|
||||
CdfsGlobalData->CacheMgrCallbacks.ReleaseFromLazyWrite = CdfsReleaseFromLazyWrite;
|
||||
CdfsGlobalData->CacheMgrCallbacks.AcquireForReadAhead = CdfsAcquireForLazyWrite;
|
||||
CdfsGlobalData->CacheMgrCallbacks.ReleaseFromReadAhead = CdfsReleaseFromLazyWrite;
|
||||
|
||||
IoRegisterFileSystem(DeviceObject);
|
||||
DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||
|
||||
return(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN NTAPI
|
||||
CdfsAcquireForLazyWrite(IN PVOID Context,
|
||||
IN BOOLEAN Wait)
|
||||
{
|
||||
PFCB Fcb = (PFCB)Context;
|
||||
ASSERT(Fcb);
|
||||
DPRINT("CdfsAcquireForLazyWrite(): Fcb %p\n", Fcb);
|
||||
|
||||
if (!ExAcquireResourceExclusiveLite(&(Fcb->MainResource), Wait))
|
||||
{
|
||||
DPRINT("CdfsAcquireForLazyWrite(): ExReleaseResourceLite failed.\n");
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
CdfsReleaseFromLazyWrite(IN PVOID Context)
|
||||
{
|
||||
PFCB Fcb = (PFCB)Context;
|
||||
ASSERT(Fcb);
|
||||
DPRINT("CdfsReleaseFromLazyWrite(): Fcb %p\n", Fcb);
|
||||
|
||||
ExReleaseResourceLite(&(Fcb->MainResource));
|
||||
}
|
||||
|
|
|
@ -178,6 +178,7 @@ typedef struct _FCB
|
|||
{
|
||||
FSRTL_COMMON_FCB_HEADER RFCB;
|
||||
SECTION_OBJECT_POINTERS SectionObjectPointers;
|
||||
ERESOURCE MainResource;
|
||||
ERESOURCE PagingIoResource;
|
||||
|
||||
PFILE_OBJECT FileObject;
|
||||
|
@ -189,8 +190,6 @@ typedef struct _FCB
|
|||
WCHAR PathName[MAX_PATH]; /* path+filename 260 max */
|
||||
WCHAR ShortNameBuffer[13];
|
||||
|
||||
ERESOURCE MainResource;
|
||||
|
||||
LIST_ENTRY FcbListEntry;
|
||||
struct _FCB* ParentFcb;
|
||||
|
||||
|
@ -233,6 +232,7 @@ typedef struct
|
|||
PDRIVER_OBJECT DriverObject;
|
||||
PDEVICE_OBJECT DeviceObject;
|
||||
ULONG Flags;
|
||||
CACHE_MANAGER_CALLBACKS CacheMgrCallbacks;
|
||||
} CDFS_GLOBAL_DATA, *PCDFS_GLOBAL_DATA;
|
||||
|
||||
extern PCDFS_GLOBAL_DATA CdfsGlobalData;
|
||||
|
@ -418,4 +418,11 @@ NTSTATUS STDCALL
|
|||
DriverEntry(PDRIVER_OBJECT DriverObject,
|
||||
PUNICODE_STRING RegistryPath);
|
||||
|
||||
BOOLEAN NTAPI
|
||||
CdfsAcquireForLazyWrite(IN PVOID Context,
|
||||
IN BOOLEAN Wait);
|
||||
|
||||
VOID NTAPI
|
||||
CdfsReleaseFromLazyWrite(IN PVOID Context);
|
||||
|
||||
#endif //CDFS_H
|
||||
|
|
|
@ -245,8 +245,8 @@ CdfsFCBInitializeCache(PVCB Vcb,
|
|||
CcInitializeCacheMap(FileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL);
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
|
||||
ObDereferenceObject(FileObject);
|
||||
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
||||
|
@ -430,8 +430,8 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb,
|
|||
CcInitializeCacheMap(FileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL);
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
||||
}
|
||||
|
||||
|
|
|
@ -402,8 +402,8 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
|||
CcInitializeCacheMap(DeviceExt->StreamFileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
TRUE,
|
||||
NULL,
|
||||
NULL);
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
|
||||
ExInitializeResourceLite(&DeviceExt->VcbResource);
|
||||
ExInitializeResourceLite(&DeviceExt->DirResource);
|
||||
|
|
|
@ -85,8 +85,8 @@ CdfsReadFile(PDEVICE_EXTENSION DeviceExt,
|
|||
CcInitializeCacheMap(FileObject,
|
||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL);
|
||||
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||
Fcb);
|
||||
}
|
||||
|
||||
FileOffset.QuadPart = (LONGLONG)ReadOffset;
|
||||
|
|
Loading…
Reference in a new issue