mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 00:45:24 +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
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* GLOBALS ******************************************************************/
|
||||||
|
|
||||||
PCDFS_GLOBAL_DATA CdfsGlobalData;
|
PCDFS_GLOBAL_DATA CdfsGlobalData;
|
||||||
|
|
||||||
|
@ -98,9 +98,41 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
|
||||||
|
|
||||||
DriverObject->DriverUnload = NULL;
|
DriverObject->DriverUnload = NULL;
|
||||||
|
|
||||||
|
/* Cache manager */
|
||||||
|
CdfsGlobalData->CacheMgrCallbacks.AcquireForLazyWrite = CdfsAcquireForLazyWrite;
|
||||||
|
CdfsGlobalData->CacheMgrCallbacks.ReleaseFromLazyWrite = CdfsReleaseFromLazyWrite;
|
||||||
|
CdfsGlobalData->CacheMgrCallbacks.AcquireForReadAhead = CdfsAcquireForLazyWrite;
|
||||||
|
CdfsGlobalData->CacheMgrCallbacks.ReleaseFromReadAhead = CdfsReleaseFromLazyWrite;
|
||||||
|
|
||||||
IoRegisterFileSystem(DeviceObject);
|
IoRegisterFileSystem(DeviceObject);
|
||||||
DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
|
DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
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;
|
FSRTL_COMMON_FCB_HEADER RFCB;
|
||||||
SECTION_OBJECT_POINTERS SectionObjectPointers;
|
SECTION_OBJECT_POINTERS SectionObjectPointers;
|
||||||
|
ERESOURCE MainResource;
|
||||||
ERESOURCE PagingIoResource;
|
ERESOURCE PagingIoResource;
|
||||||
|
|
||||||
PFILE_OBJECT FileObject;
|
PFILE_OBJECT FileObject;
|
||||||
|
@ -189,8 +190,6 @@ typedef struct _FCB
|
||||||
WCHAR PathName[MAX_PATH]; /* path+filename 260 max */
|
WCHAR PathName[MAX_PATH]; /* path+filename 260 max */
|
||||||
WCHAR ShortNameBuffer[13];
|
WCHAR ShortNameBuffer[13];
|
||||||
|
|
||||||
ERESOURCE MainResource;
|
|
||||||
|
|
||||||
LIST_ENTRY FcbListEntry;
|
LIST_ENTRY FcbListEntry;
|
||||||
struct _FCB* ParentFcb;
|
struct _FCB* ParentFcb;
|
||||||
|
|
||||||
|
@ -233,6 +232,7 @@ typedef struct
|
||||||
PDRIVER_OBJECT DriverObject;
|
PDRIVER_OBJECT DriverObject;
|
||||||
PDEVICE_OBJECT DeviceObject;
|
PDEVICE_OBJECT DeviceObject;
|
||||||
ULONG Flags;
|
ULONG Flags;
|
||||||
|
CACHE_MANAGER_CALLBACKS CacheMgrCallbacks;
|
||||||
} CDFS_GLOBAL_DATA, *PCDFS_GLOBAL_DATA;
|
} CDFS_GLOBAL_DATA, *PCDFS_GLOBAL_DATA;
|
||||||
|
|
||||||
extern PCDFS_GLOBAL_DATA CdfsGlobalData;
|
extern PCDFS_GLOBAL_DATA CdfsGlobalData;
|
||||||
|
@ -418,4 +418,11 @@ NTSTATUS STDCALL
|
||||||
DriverEntry(PDRIVER_OBJECT DriverObject,
|
DriverEntry(PDRIVER_OBJECT DriverObject,
|
||||||
PUNICODE_STRING RegistryPath);
|
PUNICODE_STRING RegistryPath);
|
||||||
|
|
||||||
|
BOOLEAN NTAPI
|
||||||
|
CdfsAcquireForLazyWrite(IN PVOID Context,
|
||||||
|
IN BOOLEAN Wait);
|
||||||
|
|
||||||
|
VOID NTAPI
|
||||||
|
CdfsReleaseFromLazyWrite(IN PVOID Context);
|
||||||
|
|
||||||
#endif //CDFS_H
|
#endif //CDFS_H
|
||||||
|
|
|
@ -245,8 +245,8 @@ CdfsFCBInitializeCache(PVCB Vcb,
|
||||||
CcInitializeCacheMap(FileObject,
|
CcInitializeCacheMap(FileObject,
|
||||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||||
FALSE,
|
FALSE,
|
||||||
NULL,
|
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||||
NULL);
|
Fcb);
|
||||||
|
|
||||||
ObDereferenceObject(FileObject);
|
ObDereferenceObject(FileObject);
|
||||||
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
||||||
|
@ -430,8 +430,8 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb,
|
||||||
CcInitializeCacheMap(FileObject,
|
CcInitializeCacheMap(FileObject,
|
||||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||||
FALSE,
|
FALSE,
|
||||||
NULL,
|
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||||
NULL);
|
Fcb);
|
||||||
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
Fcb->Flags |= FCB_CACHE_INITIALIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -402,8 +402,8 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject,
|
||||||
CcInitializeCacheMap(DeviceExt->StreamFileObject,
|
CcInitializeCacheMap(DeviceExt->StreamFileObject,
|
||||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||||
TRUE,
|
TRUE,
|
||||||
NULL,
|
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||||
NULL);
|
Fcb);
|
||||||
|
|
||||||
ExInitializeResourceLite(&DeviceExt->VcbResource);
|
ExInitializeResourceLite(&DeviceExt->VcbResource);
|
||||||
ExInitializeResourceLite(&DeviceExt->DirResource);
|
ExInitializeResourceLite(&DeviceExt->DirResource);
|
||||||
|
|
|
@ -85,8 +85,8 @@ CdfsReadFile(PDEVICE_EXTENSION DeviceExt,
|
||||||
CcInitializeCacheMap(FileObject,
|
CcInitializeCacheMap(FileObject,
|
||||||
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
(PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize),
|
||||||
FALSE,
|
FALSE,
|
||||||
NULL,
|
&(CdfsGlobalData->CacheMgrCallbacks),
|
||||||
NULL);
|
Fcb);
|
||||||
}
|
}
|
||||||
|
|
||||||
FileOffset.QuadPart = (LONGLONG)ReadOffset;
|
FileOffset.QuadPart = (LONGLONG)ReadOffset;
|
||||||
|
|
Loading…
Reference in a new issue