diff --git a/reactos/drivers/fs/cdfs/cdfs.h b/reactos/drivers/fs/cdfs/cdfs.h index ba50f234a89..b25d8994864 100644 --- a/reactos/drivers/fs/cdfs/cdfs.h +++ b/reactos/drivers/fs/cdfs/cdfs.h @@ -193,7 +193,6 @@ typedef struct _FCB typedef struct _CCB { - PFCB Fcb; LIST_ENTRY NextCCB; PFILE_OBJECT PtrFileObject; LARGE_INTEGER CurrentByteOffset; diff --git a/reactos/drivers/fs/cdfs/cleanup.c b/reactos/drivers/fs/cdfs/cleanup.c index 88ea462be05..2ce2d461a6a 100644 --- a/reactos/drivers/fs/cdfs/cleanup.c +++ b/reactos/drivers/fs/cdfs/cleanup.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: cleanup.c,v 1.2 2003/01/02 16:01:21 hbirr Exp $ +/* $Id: cleanup.c,v 1.3 2003/02/13 22:24:15 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -45,23 +45,16 @@ CdfsCleanupFile(PDEVICE_EXTENSION DeviceExt, * FUNCTION: Cleans up after a file has been closed. */ { - PCCB Ccb; DPRINT("CdfsCleanupFile(DeviceExt %x, FileObject %x)\n", DeviceExt, FileObject); - Ccb = (PCCB) (FileObject->FsContext2); - if (Ccb == NULL) - { - return STATUS_SUCCESS; - } - /* Uninitialize file cache if initialized for this file object. */ - if (Ccb->Fcb->RFCB.Bcb != NULL) + if (FileObject->SectionObjectPointers && FileObject->SectionObjectPointers->SharedCacheMap) { - CcRosReleaseFileCache (FileObject, Ccb->Fcb->RFCB.Bcb); + CcRosReleaseFileCache (FileObject); } return STATUS_SUCCESS; diff --git a/reactos/drivers/fs/cdfs/close.c b/reactos/drivers/fs/cdfs/close.c index d21ca43dba8..eea52c112d6 100644 --- a/reactos/drivers/fs/cdfs/close.c +++ b/reactos/drivers/fs/cdfs/close.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: close.c,v 1.5 2002/09/15 22:21:40 hbirr Exp $ +/* $Id: close.c,v 1.6 2003/02/13 22:24:15 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -46,7 +46,7 @@ CdfsCloseFile(PDEVICE_EXTENSION DeviceExt, */ { PCCB Ccb; - + DPRINT("CdfsCloseFile(DeviceExt %x, FileObject %x)\n", DeviceExt, FileObject); @@ -66,8 +66,7 @@ CdfsCloseFile(PDEVICE_EXTENSION DeviceExt, // This a FO, that was created outside from FSD. // Some FO's are created with IoCreateStreamFileObject() insid from FSD. // This FO's don't have a FileName. - CdfsReleaseFCB(DeviceExt, - Ccb->Fcb); + CdfsReleaseFCB(DeviceExt, FileObject->FsContext); } if (Ccb->DirectorySearchPattern) diff --git a/reactos/drivers/fs/cdfs/create.c b/reactos/drivers/fs/cdfs/create.c index a04215a97d2..7db487e9ce2 100644 --- a/reactos/drivers/fs/cdfs/create.c +++ b/reactos/drivers/fs/cdfs/create.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: create.c,v 1.7 2002/09/15 22:21:40 hbirr Exp $ +/* $Id: create.c,v 1.8 2003/02/13 22:24:15 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -45,12 +45,9 @@ CdfsMakeAbsoluteFilename(PFILE_OBJECT pFileObject, { PWSTR rcName; PFCB Fcb; - PCCB Ccb; DPRINT("try related for %S\n", pRelativeFileName); - Ccb = pFileObject->FsContext2; - assert(Ccb); - Fcb = Ccb->Fcb; + Fcb = pFileObject->FsContext; assert(Fcb); /* verify related object is a directory and target name @@ -169,7 +166,6 @@ CdfsCreateFile(PDEVICE_OBJECT DeviceObject, ULONG RequestedDisposition; ULONG RequestedOptions; PFCB Fcb; - PCCB Ccb; // PWSTR FileName; NTSTATUS Status; @@ -200,8 +196,7 @@ CdfsCreateFile(PDEVICE_OBJECT DeviceObject, if (NT_SUCCESS(Status)) { - Ccb = FileObject->FsContext2; - Fcb = Ccb->Fcb; + Fcb = FileObject->FsContext; /* * Check the file has the requested attributes */ diff --git a/reactos/drivers/fs/cdfs/dirctl.c b/reactos/drivers/fs/cdfs/dirctl.c index abb7d7e93c8..3315d16551e 100644 --- a/reactos/drivers/fs/cdfs/dirctl.c +++ b/reactos/drivers/fs/cdfs/dirctl.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: dirctl.c,v 1.11 2002/09/14 13:10:45 guido Exp $ +/* $Id: dirctl.c,v 1.12 2003/02/13 22:24:15 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -555,7 +555,7 @@ CdfsQueryDirectory(PDEVICE_OBJECT DeviceObject, FileObject = Stack->FileObject; Ccb = (PCCB)FileObject->FsContext2; - Fcb = Ccb->Fcb; + Fcb = (PFCB)FileObject->FsContext; /* Obtain the callers parameters */ BufferLength = Stack->Parameters.QueryDirectory.Length; diff --git a/reactos/drivers/fs/cdfs/fcb.c b/reactos/drivers/fs/cdfs/fcb.c index cbd8bc5e8f6..f6d2361edff 100644 --- a/reactos/drivers/fs/cdfs/fcb.c +++ b/reactos/drivers/fs/cdfs/fcb.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: fcb.c,v 1.11 2002/10/01 19:27:16 chorns Exp $ +/* $Id: fcb.c,v 1.12 2003/02/13 22:24:15 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -187,7 +187,7 @@ CdfsGrabFCBFromTable(PDEVICE_EXTENSION Vcb, if (FileName == NULL || *FileName == 0) { DPRINT("Return FCB for stream file object\n"); - Fcb = ((PCCB)Vcb->StreamFileObject->FsContext2)->Fcb; + Fcb = Vcb->StreamFileObject->FsContext; Fcb->RefCount++; KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql); return(Fcb); @@ -237,15 +237,13 @@ CdfsFCBInitializeCache(PVCB Vcb, FileObject->Flags = FileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; FileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; - FileObject->FsContext = (PVOID) &Fcb->RFCB; + FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; - newCCB->Fcb = Fcb; newCCB->PtrFileObject = FileObject; Fcb->FileObject = FileObject; Fcb->DevExt = Vcb; Status = CcRosInitializeFileCache(FileObject, - &Fcb->RFCB.Bcb, PAGE_SIZE); if (!NT_SUCCESS(Status)) { @@ -417,16 +415,14 @@ CdfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb, FileObject->Flags = FileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; FileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; - FileObject->FsContext = (PVOID)&Fcb->RFCB; + FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; - newCCB->Fcb = Fcb; newCCB->PtrFileObject = FileObject; Fcb->DevExt = Vcb; if (CdfsFCBIsDirectory(Fcb)) { Status = CcRosInitializeFileCache(FileObject, - &Fcb->RFCB.Bcb, PAGE_SIZE); if (!NT_SUCCESS(Status)) { diff --git a/reactos/drivers/fs/cdfs/fsctl.c b/reactos/drivers/fs/cdfs/fsctl.c index cf14c8dce9e..042aae54bfc 100644 --- a/reactos/drivers/fs/cdfs/fsctl.c +++ b/reactos/drivers/fs/cdfs/fsctl.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: fsctl.c,v 1.12 2002/10/01 19:27:16 chorns Exp $ +/* $Id: fsctl.c,v 1.13 2003/02/13 22:24:15 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -379,12 +379,11 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject, sizeof(CCB)); DeviceExt->StreamFileObject->Flags = DeviceExt->StreamFileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - DeviceExt->StreamFileObject->FsContext = (PVOID)&Fcb->RFCB; + DeviceExt->StreamFileObject->FsContext = Fcb; DeviceExt->StreamFileObject->FsContext2 = Ccb; DeviceExt->StreamFileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; DeviceExt->StreamFileObject->PrivateCacheMap = NULL; DeviceExt->StreamFileObject->Vpb = DeviceExt->Vpb; - Ccb->Fcb = Fcb; Ccb->PtrFileObject = DeviceExt->StreamFileObject; Fcb->FileObject = DeviceExt->StreamFileObject; Fcb->DevExt = (PDEVICE_EXTENSION)DeviceExt->StorageDevice; @@ -398,7 +397,6 @@ CdfsMountVolume(PDEVICE_OBJECT DeviceObject, Fcb->Entry.DataLengthL = (DeviceExt->CdInfo.VolumeSpaceSize + DeviceExt->CdInfo.VolumeOffset) * BLOCKSIZE; Status = CcRosInitializeFileCache(DeviceExt->StreamFileObject, - &Fcb->RFCB.Bcb, PAGE_SIZE); if (!NT_SUCCESS (Status)) { diff --git a/reactos/drivers/fs/cdfs/rw.c b/reactos/drivers/fs/cdfs/rw.c index 7068a4c05db..3befacbd80f 100644 --- a/reactos/drivers/fs/cdfs/rw.c +++ b/reactos/drivers/fs/cdfs/rw.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: rw.c,v 1.9 2003/01/02 16:02:02 hbirr Exp $ +/* $Id: rw.c,v 1.10 2003/02/13 22:24:15 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -71,7 +71,7 @@ CdfsReadFile(PDEVICE_EXTENSION DeviceExt, return(STATUS_SUCCESS); Ccb = (PCCB)FileObject->FsContext2; - Fcb = Ccb->Fcb; + Fcb = (PFCB)FileObject->FsContext; if (ReadOffset >= Fcb->Entry.DataLengthL) return(STATUS_END_OF_FILE); @@ -87,7 +87,7 @@ CdfsReadFile(PDEVICE_EXTENSION DeviceExt, Length = Fcb->Entry.DataLengthL - ReadOffset; if (FileObject->PrivateCacheMap == NULL) { - CcRosInitializeFileCache(FileObject, &Fcb->RFCB.Bcb, PAGE_SIZE); + CcRosInitializeFileCache(FileObject, PAGE_SIZE); } FileOffset.QuadPart = (LONGLONG)ReadOffset; diff --git a/reactos/drivers/fs/ntfs/create.c b/reactos/drivers/fs/ntfs/create.c index 3d45e434d94..de39ee50d7c 100644 --- a/reactos/drivers/fs/ntfs/create.c +++ b/reactos/drivers/fs/ntfs/create.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: create.c,v 1.1 2002/06/25 22:23:05 ekohl Exp $ +/* $Id: create.c,v 1.2 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -44,12 +44,9 @@ NtfsMakeAbsoluteFilename(PFILE_OBJECT pFileObject, { PWSTR rcName; PFCB Fcb; - PCCB Ccb; DPRINT("try related for %S\n", pRelativeFileName); - Ccb = pFileObject->FsContext2; - assert(Ccb); - Fcb = Ccb->Fcb; + Fcb = pFileObject->FsContext; assert(Fcb); /* verify related object is a directory and target name diff --git a/reactos/drivers/fs/ntfs/dirctl.c b/reactos/drivers/fs/ntfs/dirctl.c index 19ab72758c1..aeccfcacc20 100644 --- a/reactos/drivers/fs/ntfs/dirctl.c +++ b/reactos/drivers/fs/ntfs/dirctl.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: dirctl.c,v 1.4 2003/01/17 18:51:13 ekohl Exp $ +/* $Id: dirctl.c,v 1.5 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -505,7 +505,7 @@ NtfsQueryDirectory(PDEVICE_OBJECT DeviceObject, FileObject = Stack->FileObject; Ccb = (PCCB)FileObject->FsContext2; - Fcb = Ccb->Fcb; + Fcb = (PFCB)FileObject->FsContext; /* Obtain the callers parameters */ BufferLength = Stack->Parameters.QueryDirectory.Length; diff --git a/reactos/drivers/fs/ntfs/fcb.c b/reactos/drivers/fs/ntfs/fcb.c index 85efee55041..993d39d1536 100644 --- a/reactos/drivers/fs/ntfs/fcb.c +++ b/reactos/drivers/fs/ntfs/fcb.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: fcb.c,v 1.4 2002/10/01 19:27:17 chorns Exp $ +/* $Id: fcb.c,v 1.5 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -153,7 +153,7 @@ NtfsReleaseFCB(PDEVICE_EXTENSION Vcb, if (Fcb->RefCount <= 0 && !NtfsFCBIsDirectory(Fcb)) { RemoveEntryList(&Fcb->FcbListEntry); - CcRosReleaseFileCache(NULL, Fcb->RFCB.Bcb); + CcRosReleaseFileCache(Fcb->FileObject); NtfsDestroyFCB(Fcb); } KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql); @@ -186,7 +186,7 @@ NtfsGrabFCBFromTable(PDEVICE_EXTENSION Vcb, if (FileName == NULL || *FileName == 0) { DPRINT("Return FCB for stream file object\n"); - Fcb = ((PCCB)Vcb->StreamFileObject->FsContext2)->Fcb; + Fcb = Vcb->StreamFileObject->FsContext; Fcb->RefCount++; KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql); return(Fcb); @@ -236,15 +236,13 @@ NtfsFCBInitializeCache(PVCB Vcb, FileObject->Flags = FileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; FileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; - FileObject->FsContext = (PVOID) &Fcb->RFCB; + FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; - newCCB->Fcb = Fcb; newCCB->PtrFileObject = FileObject; Fcb->FileObject = FileObject; Fcb->DevExt = Vcb; Status = CcRosInitializeFileCache(FileObject, - &Fcb->RFCB.Bcb, CACHEPAGESIZE(Vcb)); if (!NT_SUCCESS(Status)) { @@ -409,16 +407,14 @@ NtfsAttachFCBToFileObject(PDEVICE_EXTENSION Vcb, FileObject->Flags = FileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; FileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; - FileObject->FsContext = (PVOID)&Fcb->RFCB; + FileObject->FsContext = Fcb; FileObject->FsContext2 = newCCB; - newCCB->Fcb = Fcb; newCCB->PtrFileObject = FileObject; Fcb->DevExt = Vcb; if (!(Fcb->Flags & FCB_CACHE_INITIALIZED)) { Status = CcRosInitializeFileCache(FileObject, - &Fcb->RFCB.Bcb, CACHEPAGESIZE(Vcb)); if (!NT_SUCCESS(Status)) { diff --git a/reactos/drivers/fs/ntfs/fsctl.c b/reactos/drivers/fs/ntfs/fsctl.c index c1d4601cc2d..45aafa47f0b 100644 --- a/reactos/drivers/fs/ntfs/fsctl.c +++ b/reactos/drivers/fs/ntfs/fsctl.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: fsctl.c,v 1.4 2002/09/08 10:22:11 chorns Exp $ +/* $Id: fsctl.c,v 1.5 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -275,12 +275,11 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject, sizeof(CCB)); DeviceExt->StreamFileObject->Flags = DeviceExt->StreamFileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - DeviceExt->StreamFileObject->FsContext = (PVOID)&Fcb->RFCB; + DeviceExt->StreamFileObject->FsContext = Fcb; DeviceExt->StreamFileObject->FsContext2 = Ccb; DeviceExt->StreamFileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; DeviceExt->StreamFileObject->PrivateCacheMap = NULL; DeviceExt->StreamFileObject->Vpb = DeviceExt->Vpb; - Ccb->Fcb = Fcb; Ccb->PtrFileObject = DeviceExt->StreamFileObject; Fcb->FileObject = DeviceExt->StreamFileObject; Fcb->DevExt = (PDEVICE_EXTENSION)DeviceExt->StorageDevice; @@ -295,7 +294,6 @@ NtfsMountVolume(PDEVICE_OBJECT DeviceObject, // Fcb->Entry.DataLengthL = DeviceExt->CdInfo.VolumeSpaceSize * BLOCKSIZE; Status = CcRosInitializeFileCache(DeviceExt->StreamFileObject, - &Fcb->RFCB.Bcb, CACHEPAGESIZE(DeviceExt)); if (!NT_SUCCESS (Status)) { diff --git a/reactos/drivers/fs/ntfs/ntfs.h b/reactos/drivers/fs/ntfs/ntfs.h index b700ddd7704..c1fbf65a06e 100644 --- a/reactos/drivers/fs/ntfs/ntfs.h +++ b/reactos/drivers/fs/ntfs/ntfs.h @@ -106,7 +106,6 @@ typedef struct _FCB typedef struct _CCB { - PFCB Fcb; LIST_ENTRY NextCCB; PFILE_OBJECT PtrFileObject; LARGE_INTEGER CurrentByteOffset; diff --git a/reactos/drivers/fs/vfat/cleanup.c b/reactos/drivers/fs/vfat/cleanup.c index c4574593a20..44fc5645ccd 100644 --- a/reactos/drivers/fs/vfat/cleanup.c +++ b/reactos/drivers/fs/vfat/cleanup.c @@ -1,4 +1,4 @@ -/* $Id: cleanup.c,v 1.10 2003/01/25 15:55:07 hbirr Exp $ +/* $Id: cleanup.c,v 1.11 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -24,7 +24,6 @@ VfatCleanupFile(PVFAT_IRP_CONTEXT IrpContext) * FUNCTION: Cleans up after a file has been closed. */ { - PVFATCCB pCcb; PVFATFCB pFcb; PDEVICE_EXTENSION DeviceExt = IrpContext->DeviceExt; PFILE_OBJECT FileObject = IrpContext->FileObject; @@ -33,30 +32,25 @@ VfatCleanupFile(PVFAT_IRP_CONTEXT IrpContext) DeviceExt, FileObject); /* FIXME: handle file/directory deletion here */ - pCcb = (PVFATCCB) (FileObject->FsContext2); - if (pCcb == NULL) - { - return STATUS_SUCCESS; - } - pFcb = pCcb->pFcb; - - if (!(pFcb->entry.Attrib & FILE_ATTRIBUTE_DIRECTORY) && - FsRtlAreThereCurrentFileLocks(&pFcb->FileLock)) + pFcb = (PVFATFCB) FileObject->FsContext; + if (pFcb) { - /* remove all locks this process have on this file */ - FsRtlFastUnlockAll(&pFcb->FileLock, - FileObject, - IoGetRequestorProcess(IrpContext->Irp), - NULL - ); - } + if (!(pFcb->entry.Attrib & FILE_ATTRIBUTE_DIRECTORY) && + FsRtlAreThereCurrentFileLocks(&pFcb->FileLock)) + { + /* remove all locks this process have on this file */ + FsRtlFastUnlockAll(&pFcb->FileLock, + FileObject, + IoGetRequestorProcess(IrpContext->Irp), + NULL); + } - /* Uninitialize file cache if initialized for this file object. */ - if (pFcb->RFCB.Bcb != NULL) - { - CcRosReleaseFileCache (FileObject, pFcb->RFCB.Bcb); - } - + /* Uninitialize file cache if initialized for this file object. */ + if (FileObject->PrivateCacheMap) + { + CcRosReleaseFileCache (FileObject); + } + } return STATUS_SUCCESS; } diff --git a/reactos/drivers/fs/vfat/close.c b/reactos/drivers/fs/vfat/close.c index 50fe84b580b..29b761eb0e3 100644 --- a/reactos/drivers/fs/vfat/close.c +++ b/reactos/drivers/fs/vfat/close.c @@ -1,4 +1,4 @@ -/* $Id: close.c,v 1.16 2003/01/11 15:56:43 hbirr Exp $ +/* $Id: close.c,v 1.17 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -33,13 +33,13 @@ VfatCloseFile (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject) /* FIXME : update entry in directory? */ pCcb = (PVFATCCB) (FileObject->FsContext2); + pFcb = (PVFATFCB) (FileObject->FsContext); - DPRINT ("pCcb %x\n", pCcb); - if (pCcb == NULL) + if (pFcb == NULL) { - return STATUS_SUCCESS; + return STATUS_SUCCESS; } - pFcb = pCcb->pFcb; + if (pFcb->Flags & FCB_IS_VOLUME) { DPRINT1("Volume\n"); @@ -58,15 +58,21 @@ VfatCloseFile (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject) delEntry (DeviceExt, FileObject); } else - Status = STATUS_DELETE_PENDING; + { + Status = STATUS_DELETE_PENDING; + } } - FileObject->FsContext2 = NULL; vfatReleaseFCB (DeviceExt, pFcb); } - else - FileObject->FsContext2 = NULL; + + FileObject->FsContext2 = NULL; + FileObject->FsContext = NULL; + FileObject->SectionObjectPointers = NULL; - vfatDestroyCCB(pCcb); + if (pCcb) + { + vfatDestroyCCB(pCcb); + } return Status; } diff --git a/reactos/drivers/fs/vfat/create.c b/reactos/drivers/fs/vfat/create.c index cd21ec9d900..e5f3f42c09b 100644 --- a/reactos/drivers/fs/vfat/create.c +++ b/reactos/drivers/fs/vfat/create.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: create.c,v 1.53 2003/01/19 01:06:45 gvg Exp $ +/* $Id: create.c,v 1.54 2003/02/13 22:24:16 hbirr Exp $ * * PROJECT: ReactOS kernel * FILE: services/fs/vfat/create.c @@ -364,12 +364,9 @@ vfatMakeAbsoluteFilename (PFILE_OBJECT pFileObject, { PWSTR rcName; PVFATFCB fcb; - PVFATCCB ccb; DPRINT ("try related for %S\n", pRelativeFileName); - ccb = pFileObject->FsContext2; - assert (ccb); - fcb = ccb->pFcb; + fcb = pFileObject->FsContext; assert (fcb); /* verify related object is a directory and target name @@ -600,11 +597,8 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) memset(pCcb, 0, sizeof(VFATCCB)); FileObject->Flags |= FO_FCB_IS_VALID; FileObject->SectionObjectPointers = &pFcb->SectionObjectPointers; - FileObject->FsContext = (PVOID) &pFcb->RFCB; + FileObject->FsContext = pFcb; FileObject->FsContext2 = pCcb; - pCcb->pFcb = pFcb; - pCcb->PtrFileObject = FileObject; - pFcb->pDevExt = DeviceExt; pFcb->RefCount++; Irp->IoStatus.Information = FILE_OPENED; @@ -654,8 +648,7 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) Attributes & FILE_ATTRIBUTE_VALID_FLAGS); if (NT_SUCCESS (Status)) { - pCcb = FileObject->FsContext2; - pFcb = pCcb->pFcb; + pFcb = FileObject->FsContext; Irp->IoStatus.Information = FILE_CREATED; VfatSetAllocationSizeInformation(FileObject, pFcb, @@ -689,8 +682,7 @@ VfatCreateFile (PDEVICE_OBJECT DeviceObject, PIRP Irp) return(STATUS_OBJECT_NAME_COLLISION); } - pCcb = FileObject->FsContext2; - pFcb = pCcb->pFcb; + pFcb = FileObject->FsContext; /* * Check the file has the requested attributes diff --git a/reactos/drivers/fs/vfat/dir.c b/reactos/drivers/fs/vfat/dir.c index 10049c3dc59..5db7131e265 100644 --- a/reactos/drivers/fs/vfat/dir.c +++ b/reactos/drivers/fs/vfat/dir.c @@ -1,5 +1,5 @@ /* - * $Id: dir.c,v 1.27 2002/11/11 21:49:18 hbirr Exp $ + * $Id: dir.c,v 1.28 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -209,7 +209,7 @@ NTSTATUS DoQuery (PVFAT_IRP_CONTEXT IrpContext) BOOLEAN First = FALSE; pCcb = (PVFATCCB) IrpContext->FileObject->FsContext2; - pFcb = pCcb->pFcb; + pFcb = (PVFATFCB) IrpContext->FileObject->FsContext; if (!ExAcquireResourceSharedLite(&pFcb->MainResource, IrpContext->Flags & IRPCONTEXT_CANWAIT)) { diff --git a/reactos/drivers/fs/vfat/dirwr.c b/reactos/drivers/fs/vfat/dirwr.c index 68b463cb76a..6ba391e377e 100644 --- a/reactos/drivers/fs/vfat/dirwr.c +++ b/reactos/drivers/fs/vfat/dirwr.c @@ -1,4 +1,4 @@ -/* $Id: dirwr.c,v 1.34 2003/01/11 15:57:55 hbirr Exp $ +/* $Id: dirwr.c,v 1.35 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -45,7 +45,7 @@ VfatUpdateEntry (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT pFileObject) DPRINT ("updEntry PathFileName \'%S\'\n", ((PVFATCCB)(pFileObject->FsContext2))->pFcb->PathName); - pFcb = ((PVFATCCB)(pFileObject->FsContext2))->pFcb; + pFcb = (PVFATFCB)pFileObject->FsContext; assert (pFcb); pDirFcb = pFcb->parentFcb; assert (pDirFcb); @@ -559,7 +559,7 @@ VfatAddEntry (PDEVICE_EXTENSION DeviceExt, CcSetDirtyPinnedData(Context, NULL); CcUnpinData(Context); - // FEXME: check status + // FIXME: check status vfatMakeFCBFromDirEntry (DeviceExt, pDirFcb, FileName, pEntry, start, start + nbSlots - 1, &newFCB); vfatAttachFCBToFileObject (DeviceExt, newFCB, pFileObject); @@ -635,7 +635,7 @@ delEntry (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT pFileObject) } return status; } - pName = ((PVFATCCB)(pFileObject->FsContext2))->pFcb->ObjectName; + pName = ((PVFATFCB)pFileObject->FsContext)->ObjectName; if (*pName == L'\\') { pName ++; diff --git a/reactos/drivers/fs/vfat/fcb.c b/reactos/drivers/fs/vfat/fcb.c index 9e81f371d14..759eb7a1631 100644 --- a/reactos/drivers/fs/vfat/fcb.c +++ b/reactos/drivers/fs/vfat/fcb.c @@ -1,4 +1,4 @@ -/* $Id: fcb.c,v 1.26 2003/01/25 15:55:07 hbirr Exp $ +/* $Id: fcb.c,v 1.27 2003/02/13 22:24:16 hbirr Exp $ * * * FILE: fcb.c @@ -156,12 +156,13 @@ vfatReleaseFCB(PDEVICE_EXTENSION pVCB, PVFATFCB pFCB) if (vfatFCBIsDirectory(pFCB)) { /* Uninitialize file cache if initialized for this file object. */ - if (pFCB->RFCB.Bcb != NULL) + if (pFCB->FileObject->SectionObjectPointers->SharedCacheMap) { - CcRosReleaseFileCache(pFCB->FileObject, pFCB->RFCB.Bcb); + CcRosReleaseFileCache(pFCB->FileObject); } vfatDestroyCCB(pFCB->FileObject->FsContext2); pFCB->FileObject->FsContext2 = NULL; + pFCB->FileObject->FsContext = NULL; ObDereferenceObject(pFCB->FileObject); } vfatDestroyFCB (pFCB); @@ -185,7 +186,6 @@ vfatAddFCBToTable(PDEVICE_EXTENSION pVCB, PVFATFCB pFCB) Index = pFCB->Hash.Hash % FCB_HASH_TABLE_SIZE; ShortIndex = pFCB->ShortHash.Hash % FCB_HASH_TABLE_SIZE; KeAcquireSpinLock (&pVCB->FcbListLock, &oldIrql); - pFCB->pDevExt = pVCB; InsertTailList (&pVCB->FcbListHead, &pFCB->FcbListEntry); pFCB->Hash.next = pVCB->FcbHashTable[Index]; @@ -287,19 +287,15 @@ vfatFCBInitializeCacheFromVolume (PVCB vcb, PVFATFCB fcb) fileObject->Flags |= FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; fileObject->SectionObjectPointers = &fcb->SectionObjectPointers; - fileObject->FsContext = (PVOID) &fcb->RFCB; + fileObject->FsContext = fcb; fileObject->FsContext2 = newCCB; - newCCB->pFcb = fcb; - newCCB->PtrFileObject = fileObject; fcb->FileObject = fileObject; - fcb->pDevExt = vcb; fileCacheQuantum = (vcb->FatInfo.BytesPerCluster >= PAGE_SIZE) ? vcb->FatInfo.BytesPerCluster : PAGE_SIZE; status = CcRosInitializeFileCache (fileObject, - &fcb->RFCB.Bcb, fileCacheQuantum); if (!NT_SUCCESS (status)) { @@ -331,7 +327,6 @@ vfatMakeRootFCB(PDEVICE_EXTENSION pVCB) CurrentCluster = FirstCluster = pVCB->FatInfo.RootCluster; FCB->entry.FirstCluster = FirstCluster & 0xffff; FCB->entry.FirstClusterHigh = FirstCluster >> 16; - CurrentCluster = FirstCluster; while (CurrentCluster != 0xffffffff && NT_SUCCESS(Status)) { @@ -469,11 +464,8 @@ vfatAttachFCBToFileObject (PDEVICE_EXTENSION vcb, fileObject->Flags = fileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; fileObject->SectionObjectPointers = &fcb->SectionObjectPointers; - fileObject->FsContext = (PVOID) &fcb->RFCB; + fileObject->FsContext = fcb; fileObject->FsContext2 = newCCB; - newCCB->pFcb = fcb; - newCCB->PtrFileObject = fileObject; - fcb->pDevExt = vcb; DPRINT ("file open: fcb:%x file size: %d\n", fcb, fcb->entry.FileSize); return STATUS_SUCCESS; diff --git a/reactos/drivers/fs/vfat/finfo.c b/reactos/drivers/fs/vfat/finfo.c index 6ba3ca04599..3dfd2bdc3e1 100644 --- a/reactos/drivers/fs/vfat/finfo.c +++ b/reactos/drivers/fs/vfat/finfo.c @@ -1,4 +1,4 @@ -/* $Id: finfo.c,v 1.26 2003/01/28 16:48:03 hbirr Exp $ +/* $Id: finfo.c,v 1.27 2003/02/13 22:24:16 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -553,7 +553,7 @@ NTSTATUS VfatQueryInformation(PVFAT_IRP_CONTEXT IrpContext) /* INITIALIZATION */ FileInformationClass = IrpContext->Stack->Parameters.QueryFile.FileInformationClass; - FCB = ((PVFATCCB) IrpContext->FileObject->FsContext2)->pFcb; + FCB = (PVFATFCB) IrpContext->FileObject->FsContext; SystemBuffer = IrpContext->Irp->AssociatedIrp.SystemBuffer; BufferLength = IrpContext->Stack->Parameters.QueryFile.Length; @@ -654,7 +654,7 @@ NTSTATUS VfatSetInformation(PVFAT_IRP_CONTEXT IrpContext) /* INITIALIZATION */ FileInformationClass = IrpContext->Stack->Parameters.SetFile.FileInformationClass; - FCB = ((PVFATCCB) IrpContext->FileObject->FsContext2)->pFcb; + FCB = (PVFATFCB) IrpContext->FileObject->FsContext; SystemBuffer = IrpContext->Irp->AssociatedIrp.SystemBuffer; DPRINT("FileInformationClass %d\n", FileInformationClass); diff --git a/reactos/drivers/fs/vfat/flush.c b/reactos/drivers/fs/vfat/flush.c index f3878b46014..55623a086fb 100644 --- a/reactos/drivers/fs/vfat/flush.c +++ b/reactos/drivers/fs/vfat/flush.c @@ -1,4 +1,4 @@ -/* $Id: flush.c,v 1.1 2003/02/09 18:02:55 hbirr Exp $ +/* $Id: flush.c,v 1.2 2003/02/13 22:24:17 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -36,7 +36,6 @@ NTSTATUS VfatFlushVolume(PDEVICE_EXTENSION DeviceExt, PVFATFCB VolumeFcb) { PLIST_ENTRY ListEntry; PVFATFCB Fcb; - PVFATCCB Ccb; NTSTATUS Status, ReturnStatus = STATUS_SUCCESS; DPRINT("VfatFlushVolume(DeviceExt %x, FatFcb %x)\n", DeviceExt, VolumeFcb); @@ -54,11 +53,10 @@ NTSTATUS VfatFlushVolume(PDEVICE_EXTENSION DeviceExt, PVFATFCB VolumeFcb) DPRINT1("VfatFlushFile failed, status = %x\n", Status); ReturnStatus = Status; } - /* FIXME: Stop flushing if this a removable media and the media was removed */ + /* FIXME: Stop flushing if this is a removable media and the media was removed */ } - Ccb = (PVFATCCB) DeviceExt->FATFileObject->FsContext2; - Fcb = Ccb->pFcb; + Fcb = (PVFATFCB) DeviceExt->FATFileObject->FsContext; ExAcquireResourceExclusiveLite(&DeviceExt->FatResource, TRUE); Status = VfatFlushFile(DeviceExt, Fcb); @@ -79,7 +77,6 @@ NTSTATUS VfatFlush(PVFAT_IRP_CONTEXT IrpContext) { NTSTATUS Status; PVFATFCB Fcb; - PVFATCCB Ccb; /* * This request is not allowed on the main device object. */ @@ -89,9 +86,7 @@ NTSTATUS VfatFlush(PVFAT_IRP_CONTEXT IrpContext) goto ByeBye; } - Ccb = (PVFATCCB) IrpContext->FileObject->FsContext2; - assert(Ccb); - Fcb = Ccb->pFcb; + Fcb = (PVFATFCB)IrpContext->FileObject->FsContext; assert(Fcb); if (Fcb->Flags & FCB_IS_VOLUME) diff --git a/reactos/drivers/fs/vfat/fsctl.c b/reactos/drivers/fs/vfat/fsctl.c index 21376e6cf76..a5bba46ca26 100644 --- a/reactos/drivers/fs/vfat/fsctl.c +++ b/reactos/drivers/fs/vfat/fsctl.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: fsctl.c,v 1.13 2003/02/09 18:02:55 hbirr Exp $ +/* $Id: fsctl.c,v 1.14 2003/02/13 22:24:17 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -301,15 +301,12 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) wcscpy(Fcb->PathName, L"$$Fat$$"); Fcb->ObjectName = Fcb->PathName; DeviceExt->FATFileObject->Flags = DeviceExt->FATFileObject->Flags | FO_FCB_IS_VALID | FO_DIRECT_CACHE_PAGING_READ; - DeviceExt->FATFileObject->FsContext = (PVOID) &Fcb->RFCB; + DeviceExt->FATFileObject->FsContext = Fcb; DeviceExt->FATFileObject->FsContext2 = Ccb; DeviceExt->FATFileObject->SectionObjectPointers = &Fcb->SectionObjectPointers; DeviceExt->FATFileObject->PrivateCacheMap = NULL; DeviceExt->FATFileObject->Vpb = DeviceObject->Vpb; - Ccb->pFcb = Fcb; - Ccb->PtrFileObject = DeviceExt->FATFileObject; Fcb->FileObject = DeviceExt->FATFileObject; - Fcb->pDevExt = (PDEVICE_EXTENSION)DeviceExt->StorageDevice; Fcb->Flags = FCB_IS_FAT; @@ -319,11 +316,11 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) if (DeviceExt->FatInfo.FatType != FAT12) { - Status = CcRosInitializeFileCache(DeviceExt->FATFileObject, &Fcb->RFCB.Bcb, CACHEPAGESIZE(DeviceExt)); + Status = CcRosInitializeFileCache(DeviceExt->FATFileObject, CACHEPAGESIZE(DeviceExt)); } else { - Status = CcRosInitializeFileCache(DeviceExt->FATFileObject, &Fcb->RFCB.Bcb, 2 * PAGE_SIZE); + Status = CcRosInitializeFileCache(DeviceExt->FATFileObject, 2 * PAGE_SIZE); } if (!NT_SUCCESS (Status)) { @@ -349,7 +346,6 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) VolumeFcb->RFCB.FileSize.QuadPart = DeviceExt->FatInfo.Sectors * DeviceExt->FatInfo.BytesPerSector; VolumeFcb->RFCB.ValidDataLength = VolumeFcb->RFCB.FileSize; VolumeFcb->RFCB.AllocationSize = VolumeFcb->RFCB.FileSize; - VolumeFcb->pDevExt = (PDEVICE_EXTENSION)DeviceExt->StorageDevice; DeviceExt->VolumeFcb = VolumeFcb; ExAcquireResourceExclusiveLite(&VfatGlobalData->VolumeListLock, TRUE); diff --git a/reactos/drivers/fs/vfat/misc.c b/reactos/drivers/fs/vfat/misc.c index ed45fb8e08a..6c2ac2cfae7 100644 --- a/reactos/drivers/fs/vfat/misc.c +++ b/reactos/drivers/fs/vfat/misc.c @@ -1,4 +1,4 @@ -/* $Id: misc.c,v 1.6 2003/02/09 18:02:55 hbirr Exp $ +/* $Id: misc.c,v 1.7 2003/02/13 22:24:17 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -71,15 +71,13 @@ NTSTATUS VfatLockControl( ) { PVFATFCB Fcb; - PVFATCCB Ccb; NTSTATUS Status; DPRINT("VfatLockControl(IrpContext %x)\n", IrpContext); assert(IrpContext); - Ccb = (PVFATCCB)IrpContext->FileObject->FsContext2; - Fcb = Ccb->pFcb; + Fcb = (PVFATFCB)IrpContext->FileObject->FsContext; if (IrpContext->DeviceObject == VfatGlobalData->DeviceObject) { @@ -119,8 +117,6 @@ NTSTATUS STDCALL VfatBuildRequest ( assert (DeviceObject); assert (Irp); - - FsRtlEnterFileSystem(); IrpContext = VfatAllocateIrpContext(DeviceObject, Irp); if (IrpContext == NULL) { @@ -130,9 +126,20 @@ NTSTATUS STDCALL VfatBuildRequest ( } else { + if (KeGetCurrentIrql() <= PASSIVE_LEVEL) + { + FsRtlEnterFileSystem(); + } + else + { + DPRINT1("Vfat is entered at irql = %d\n", KeGetCurrentIrql()); + } Status = VfatDispatchRequest (IrpContext); + if (KeGetCurrentIrql() <= PASSIVE_LEVEL) + { + FsRtlExitFileSystem(); + } } - FsRtlExitFileSystem(); return Status; } diff --git a/reactos/drivers/fs/vfat/rw.c b/reactos/drivers/fs/vfat/rw.c index 736734514c7..a51a3ad72c0 100644 --- a/reactos/drivers/fs/vfat/rw.c +++ b/reactos/drivers/fs/vfat/rw.c @@ -1,5 +1,5 @@ -/* $Id: rw.c,v 1.54 2003/01/25 15:55:07 hbirr Exp $ +/* $Id: rw.c,v 1.55 2003/02/13 22:24:17 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -290,7 +290,7 @@ VfatReadFileData (PVFAT_IRP_CONTEXT IrpContext, PVOID Buffer, *LengthRead = 0; Ccb = (PVFATCCB)IrpContext->FileObject->FsContext2; - Fcb = Ccb->pFcb; + Fcb = IrpContext->FileObject->FsContext; BytesPerSector = DeviceExt->FatInfo.BytesPerSector; BytesPerCluster = DeviceExt->FatInfo.BytesPerCluster; @@ -451,7 +451,7 @@ NTSTATUS VfatWriteFileData(PVFAT_IRP_CONTEXT IrpContext, assert (IrpContext->FileObject->FsContext2 != NULL); Ccb = (PVFATCCB)IrpContext->FileObject->FsContext2; - Fcb = Ccb->pFcb; + Fcb = IrpContext->FileObject->FsContext; BytesPerCluster = DeviceExt->FatInfo.BytesPerCluster; BytesPerSector = DeviceExt->FatInfo.BytesPerSector; @@ -580,7 +580,6 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) { NTSTATUS Status; PVFATFCB Fcb; - PVFATCCB Ccb; ULONG Length; ULONG ReturnedLength = 0; PERESOURCE Resource = NULL; @@ -605,9 +604,7 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) assert(IrpContext->DeviceExt); assert(IrpContext->FileObject); - Ccb = (PVFATCCB) IrpContext->FileObject->FsContext2; - assert(Ccb); - Fcb = Ccb->pFcb; + Fcb = IrpContext->FileObject->FsContext; assert(Fcb); DPRINT("<%S>\n", Fcb->PathName); @@ -711,7 +708,7 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) { CacheSize = PAGE_SIZE; } - CcRosInitializeFileCache(IrpContext->FileObject, &Fcb->RFCB.Bcb, CacheSize); + CcRosInitializeFileCache(IrpContext->FileObject, CacheSize); } if (!CcCopyRead(IrpContext->FileObject, &ByteOffset, Length, IrpContext->Flags & IRPCONTEXT_CANWAIT, Buffer, @@ -805,7 +802,6 @@ ByeBye: NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext) { - PVFATCCB Ccb; PVFATFCB Fcb; PERESOURCE Resource = NULL; LARGE_INTEGER ByteOffset; @@ -832,9 +828,7 @@ NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext) assert(IrpContext->DeviceExt); assert(IrpContext->FileObject); - Ccb = (PVFATCCB) IrpContext->FileObject->FsContext2; - assert(Ccb); - Fcb = Ccb->pFcb; + Fcb = IrpContext->FileObject->FsContext; assert(Fcb); DPRINT("<%S>\n", Fcb->PathName); @@ -988,7 +982,7 @@ NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext) { CacheSize = PAGE_SIZE; } - CcRosInitializeFileCache(IrpContext->FileObject, &Fcb->RFCB.Bcb, CacheSize); + CcRosInitializeFileCache(IrpContext->FileObject, CacheSize); } if (ByteOffset.QuadPart > OldFileSize.QuadPart) { diff --git a/reactos/drivers/fs/vfat/vfat.h b/reactos/drivers/fs/vfat/vfat.h index a550de33119..4dede55121d 100644 --- a/reactos/drivers/fs/vfat/vfat.h +++ b/reactos/drivers/fs/vfat/vfat.h @@ -1,4 +1,4 @@ -/* $Id: vfat.h,v 1.55 2003/02/09 18:02:55 hbirr Exp $ */ +/* $Id: vfat.h,v 1.56 2003/02/13 22:24:17 hbirr Exp $ */ #include @@ -181,28 +181,56 @@ extern PVFAT_GLOBAL_DATA VfatGlobalData; typedef struct _VFATFCB { + /* FCB header required by ROS/NT */ REACTOS_COMMON_FCB_HEADER RFCB; SECTION_OBJECT_POINTERS SectionObjectPointers; + ERESOURCE MainResource; + ERESOURCE PagingIoResource; + /* end FCB header required by ROS/NT */ + + /* */ FATDirEntry entry; + /* point on filename (250 chars max) in PathName */ WCHAR *ObjectName; + /* path+filename 260 max */ WCHAR PathName[MAX_PATH]; + + /* short file name */ WCHAR ShortName[14]; + + /* */ LONG RefCount; - PDEVICE_EXTENSION pDevExt; + + /* List of FCB's for this volume */ LIST_ENTRY FcbListEntry; + + /* pointer to the parent fcb */ struct _VFATFCB* parentFcb; + + /* Flags for the fcb */ ULONG Flags; + + /* pointer to the file object which has initialized the fcb */ PFILE_OBJECT FileObject; + + /* Directory index for the short name entry */ ULONG dirIndex; + + /* Directory index where the long name starts */ ULONG startIndex; - ERESOURCE PagingIoResource; - ERESOURCE MainResource; - ULONG TimerCount; + + /* Share access for the file object */ SHARE_ACCESS FCBShareAccess; + + /* Entry into the hash table for the path + long name */ HASHENTRY Hash; + + /* Entry into the hash table for the path + short name */ HASHENTRY ShortHash; + + /* List of byte-range locks for this file */ FILE_LOCK FileLock; /* Structure members used only for paging files. */ @@ -212,9 +240,6 @@ typedef struct _VFATFCB typedef struct _VFATCCB { - VFATFCB * pFcb; - LIST_ENTRY NextCCB; - PFILE_OBJECT PtrFileObject; LARGE_INTEGER CurrentByteOffset; /* for DirectoryControl */ ULONG Entry; diff --git a/reactos/include/ddk/cctypes.h b/reactos/include/ddk/cctypes.h index 4d61ef8d308..dce1748afda 100644 --- a/reactos/include/ddk/cctypes.h +++ b/reactos/include/ddk/cctypes.h @@ -77,7 +77,6 @@ typedef struct _REACTOS_COMMON_FCB_HEADER { CSHORT NodeTypeCode; CSHORT NodeByteSize; - struct _BCB* Bcb; LARGE_INTEGER AllocationSize; LARGE_INTEGER FileSize; LARGE_INTEGER ValidDataLength; diff --git a/reactos/include/ddk/ntifs.h b/reactos/include/ddk/ntifs.h index e5b8290e4af..82632f7a88f 100644 --- a/reactos/include/ddk/ntifs.h +++ b/reactos/include/ddk/ntifs.h @@ -1,15 +1,11 @@ #ifndef __INCLUDE_DDK_NTIFS_H #define __INCLUDE_DDK_NTIFS_H -struct _BCB; - NTSTATUS STDCALL CcRosInitializeFileCache (PFILE_OBJECT FileObject, - struct _BCB** Bcb, ULONG CacheSegmentSize); NTSTATUS STDCALL -CcRosReleaseFileCache (PFILE_OBJECT FileObject, - struct _BCB* Bcb); +CcRosReleaseFileCache (PFILE_OBJECT FileObject); #include diff --git a/reactos/ntoskrnl/cc/copy.c b/reactos/ntoskrnl/cc/copy.c index 5284086fbc4..0835f25b603 100644 --- a/reactos/ntoskrnl/cc/copy.c +++ b/reactos/ntoskrnl/cc/copy.c @@ -1,4 +1,4 @@ -/* $Id: copy.c,v 1.13 2002/10/01 19:27:20 chorns Exp $ +/* $Id: copy.c,v 1.14 2003/02/13 22:24:18 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -268,7 +268,7 @@ CcCopyRead (IN PFILE_OBJECT FileObject, FileObject, (ULONG)FileOffset->QuadPart, Length, Wait, Buffer, IoStatus); - Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb; + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; ReadOffset = FileOffset->QuadPart; DPRINT("AllocationSize %d, FileSize %d\n", @@ -369,7 +369,7 @@ CcCopyWrite (IN PFILE_OBJECT FileObject, "Length %d, Wait %d, Buffer %x)\n", FileObject, (ULONG)FileOffset->QuadPart, Length, Wait, Buffer); - Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb; + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; WriteOffset = (ULONG)FileOffset->QuadPart; if (!Wait) @@ -472,9 +472,6 @@ CcZeroData (IN PFILE_OBJECT FileObject, Length = EndOffset->u.LowPart - StartOffset->u.LowPart; - /* - * FIXME: NT uses the shared cache map field for cached/non cached detection - */ if (FileObject->SectionObjectPointers->SharedCacheMap == NULL) { /* File is not cached */ @@ -535,7 +532,7 @@ CcZeroData (IN PFILE_OBJECT FileObject, PHYSICAL_ADDRESS page; Start = StartOffset->u.LowPart; - Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb; + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; if (Wait) { /* testing, if the requested datas are available */ diff --git a/reactos/ntoskrnl/cc/misc.c b/reactos/ntoskrnl/cc/misc.c index 0fbbbb9e52b..c6775815b21 100644 --- a/reactos/ntoskrnl/cc/misc.c +++ b/reactos/ntoskrnl/cc/misc.c @@ -13,6 +13,14 @@ /* GLOBALS *******************************************************************/ +#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S)) +#define ROUND_DOWN(N, S) (((N) % (S)) ? ROUND_UP(N, S) - S : N) + +extern FAST_MUTEX ViewLock; +extern ULONG DirtyPageCount; + +NTSTATUS CcRosInternalFreeCacheSegment(PCACHE_SEGMENT CacheSeg); + /* FUNCTIONS *****************************************************************/ /********************************************************************** @@ -73,6 +81,8 @@ CcSetFileSizes (IN PFILE_OBJECT FileObject, PBCB Bcb; PLIST_ENTRY current_entry; PCACHE_SEGMENT current; + LIST_ENTRY FreeListHead; + NTSTATUS Status; DPRINT("CcSetFileSizes(FileObject %x, FileSizes %x)\n", FileObject, FileSizes); @@ -81,31 +91,66 @@ CcSetFileSizes (IN PFILE_OBJECT FileObject, (ULONG)FileSizes->FileSize.QuadPart, (ULONG)FileSizes->ValidDataLength.QuadPart); - Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb; - - DPRINT("Bcb 0x%.08x\n", Bcb); - - KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); - + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; + assert(Bcb); + if (FileSizes->AllocationSize.QuadPart < Bcb->AllocationSize.QuadPart) - { - current_entry = Bcb->BcbSegmentListHead.Flink; - while (current_entry != &Bcb->BcbSegmentListHead) - { - current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, - BcbSegmentListEntry); - current_entry = current_entry->Flink; - if (current->FileOffset > FileSizes->AllocationSize.QuadPart) - { - KeReleaseSpinLock(&Bcb->BcbLock, oldirql); - CcRosFreeCacheSegment(Bcb, current); - KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); - current_entry = Bcb->BcbSegmentListHead.Flink; - } - } - } - Bcb->AllocationSize = FileSizes->AllocationSize; - Bcb->FileSize = FileSizes->FileSize; - KeReleaseSpinLock(&Bcb->BcbLock, oldirql); + { + InitializeListHead(&FreeListHead); + ExAcquireFastMutex(&ViewLock); + KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); + + current_entry = Bcb->BcbSegmentListHead.Flink; + while (current_entry != &Bcb->BcbSegmentListHead) + { + current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry); + current_entry = current_entry->Flink; + if (current->FileOffset > FileSizes->AllocationSize.QuadPart) + { + if (current->ReferenceCount == 0 || (current->ReferenceCount == 1 && current->Dirty)) + { + RemoveEntryList(¤t->BcbSegmentListEntry); + RemoveEntryList(¤t->CacheSegmentListEntry); + RemoveEntryList(¤t->CacheSegmentLRUListEntry); + if (current->Dirty) + { + RemoveEntryList(¤t->DirtySegmentListEntry); + DirtyPageCount -= Bcb->CacheSegmentSize / PAGE_SIZE; + } + InsertHeadList(&FreeListHead, ¤t->BcbSegmentListEntry); + } + else + { + DPRINT1("Anyone has referenced a cache segment behind the new size.\n"); + KeBugCheck(0); + } + } + } + + Bcb->AllocationSize = FileSizes->AllocationSize; + Bcb->FileSize = FileSizes->FileSize; + KeReleaseSpinLock(&Bcb->BcbLock, oldirql); + ExReleaseFastMutex(&ViewLock); + + current_entry = FreeListHead.Flink; + while(current_entry != &FreeListHead) + { + current = CONTAINING_RECORD(current_entry, CACHE_SEGMENT, BcbSegmentListEntry); + current_entry = current_entry->Flink; + Status = CcRosInternalFreeCacheSegment(current); + if (!NT_SUCCESS(Status)) + { + DPRINT1("CcRosInternalFreeCacheSegment failed, status = %x\n"); + KeBugCheck(0); + } + } + } + else + { + KeAcquireSpinLock(&Bcb->BcbLock, &oldirql); + Bcb->AllocationSize = FileSizes->AllocationSize; + Bcb->FileSize = FileSizes->FileSize; + KeReleaseSpinLock(&Bcb->BcbLock, oldirql); + } } diff --git a/reactos/ntoskrnl/cc/pin.c b/reactos/ntoskrnl/cc/pin.c index 5b4fed12fb5..af0a63def85 100644 --- a/reactos/ntoskrnl/cc/pin.c +++ b/reactos/ntoskrnl/cc/pin.c @@ -1,4 +1,4 @@ -/* $Id: pin.c,v 1.10 2003/01/11 15:22:31 hbirr Exp $ +/* $Id: pin.c,v 1.11 2003/02/13 22:24:18 hbirr Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -51,7 +51,7 @@ CcMapData (IN PFILE_OBJECT FileObject, Length, Wait, pBcb, pBuffer); ReadOffset = FileOffset->QuadPart; - Bcb = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->Bcb; + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; assert(Bcb); DPRINT("AllocationSize %d, FileSize %d\n", diff --git a/reactos/ntoskrnl/cc/view.c b/reactos/ntoskrnl/cc/view.c index 0fa2bf73183..b2f3a3ee7cc 100644 --- a/reactos/ntoskrnl/cc/view.c +++ b/reactos/ntoskrnl/cc/view.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: view.c,v 1.56 2003/01/30 18:30:53 hbirr Exp $ +/* $Id: view.c,v 1.57 2003/02/13 22:24:18 hbirr Exp $ * * PROJECT: ReactOS kernel * FILE: ntoskrnl/cc/view.c @@ -82,9 +82,9 @@ static LIST_ENTRY DirtySegmentListHead; static LIST_ENTRY CacheSegmentListHead; static LIST_ENTRY CacheSegmentLRUListHead; static LIST_ENTRY ClosedListHead; -static ULONG DirtyPageCount=0; +ULONG DirtyPageCount=0; -static FAST_MUTEX ViewLock; +FAST_MUTEX ViewLock; #ifdef CACHE_BITMAP #define CI_CACHESEG_MAPPING_REGION_SIZE (128*1024*1024) @@ -994,18 +994,19 @@ VOID CcRosDereferenceCache(PFILE_OBJECT FileObject) } NTSTATUS STDCALL -CcRosReleaseFileCache(PFILE_OBJECT FileObject, PBCB Bcb) +CcRosReleaseFileCache(PFILE_OBJECT FileObject) /* * FUNCTION: Called by the file system when a handle to a file object * has been closed. */ { - assert(Bcb); + PBCB Bcb; ExAcquireFastMutex(&ViewLock); if (FileObject->SectionObjectPointers->SharedCacheMap != NULL) { + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; if (FileObject->PrivateCacheMap != NULL) { FileObject->PrivateCacheMap = NULL; @@ -1033,52 +1034,53 @@ CcRosReleaseFileCache(PFILE_OBJECT FileObject, PBCB Bcb) NTSTATUS STDCALL CcRosInitializeFileCache(PFILE_OBJECT FileObject, - PBCB* Bcb, ULONG CacheSegmentSize) /* * FUNCTION: Initializes a BCB for a file object */ { + PBCB Bcb; DPRINT("CcRosInitializeFileCache(FileObject %x, *Bcb %x, CacheSegmentSize %d)\n", FileObject, Bcb, CacheSegmentSize); ExAcquireFastMutex(&ViewLock); - if (*Bcb == NULL) + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; + if (Bcb == NULL) { - (*Bcb) = ExAllocateFromNPagedLookasideList(&BcbLookasideList); - if ((*Bcb) == NULL) + Bcb = ExAllocateFromNPagedLookasideList(&BcbLookasideList); + if (Bcb == NULL) { ExReleaseFastMutex(&ViewLock); return(STATUS_UNSUCCESSFUL); } - memset((*Bcb), 0, sizeof(BCB)); + memset(Bcb, 0, sizeof(BCB)); ObReferenceObjectByPointer(FileObject, FILE_ALL_ACCESS, NULL, KernelMode); - (*Bcb)->FileObject = FileObject; - (*Bcb)->CacheSegmentSize = CacheSegmentSize; + Bcb->FileObject = FileObject; + Bcb->CacheSegmentSize = CacheSegmentSize; if (FileObject->FsContext) { - (*Bcb)->AllocationSize = + Bcb->AllocationSize = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->AllocationSize; - (*Bcb)->FileSize = + Bcb->FileSize = ((REACTOS_COMMON_FCB_HEADER*)FileObject->FsContext)->FileSize; } - KeInitializeSpinLock(&(*Bcb)->BcbLock); - InitializeListHead(&(*Bcb)->BcbSegmentListHead); - FileObject->SectionObjectPointers->SharedCacheMap = *Bcb; + KeInitializeSpinLock(&Bcb->BcbLock); + InitializeListHead(&Bcb->BcbSegmentListHead); + FileObject->SectionObjectPointers->SharedCacheMap = Bcb; } if (FileObject->PrivateCacheMap == NULL) { - FileObject->PrivateCacheMap = *Bcb; - (*Bcb)->RefCount++; + FileObject->PrivateCacheMap = Bcb; + Bcb->RefCount++; } - if ((*Bcb)->BcbRemoveListEntry.Flink != NULL) + if (Bcb->BcbRemoveListEntry.Flink != NULL) { - RemoveEntryList(&(*Bcb)->BcbRemoveListEntry); - (*Bcb)->BcbRemoveListEntry.Flink = NULL; + RemoveEntryList(&Bcb->BcbRemoveListEntry); + Bcb->BcbRemoveListEntry.Flink = NULL; } ExReleaseFastMutex(&ViewLock); diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index 27db19b3af1..df506109d4d 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: section.c,v 1.103 2003/01/11 15:31:05 hbirr Exp $ +/* $Id: section.c,v 1.104 2003/02/13 22:24:18 hbirr Exp $ * * PROJECT: ReactOS kernel * FILE: ntoskrnl/mm/section.c @@ -269,7 +269,7 @@ MmUnsharePageEntrySectionSegment(PSECTION_OBJECT Section, if (SHARE_COUNT_FROM_SSE(Entry) == 0) { PFILE_OBJECT FileObject; - PREACTOS_COMMON_FCB_HEADER Fcb; + PBCB Bcb; SWAPENTRY SavedSwapEntry; PHYSICAL_ADDRESS Page; @@ -277,13 +277,13 @@ MmUnsharePageEntrySectionSegment(PSECTION_OBJECT Section, FileObject = Section->FileObject; if (FileObject != NULL) { - Fcb = (PREACTOS_COMMON_FCB_HEADER)FileObject->FsContext; + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; if (FileObject->Flags & FO_DIRECT_CACHE_PAGING_READ && (Offset % PAGE_SIZE) == 0) { NTSTATUS Status; - Status = CcRosUnmapCacheSegment(Fcb->Bcb, Offset, Dirty); + Status = CcRosUnmapCacheSegment(Bcb, Offset, Dirty); if (!NT_SUCCESS(Status)) { KeBugCheck(0); @@ -324,12 +324,12 @@ MiReadPage(PMEMORY_AREA MemoryArea, PCACHE_SEGMENT CacheSeg; PFILE_OBJECT FileObject; NTSTATUS Status; - PREACTOS_COMMON_FCB_HEADER Fcb; + PBCB Bcb; FileObject = MemoryArea->Data.SectionData.Section->FileObject; - Fcb = (PREACTOS_COMMON_FCB_HEADER)FileObject->FsContext; + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; - assert(Fcb->Bcb); + assert(Bcb); /* * If the file system is letting us go directly to the cache and the @@ -346,12 +346,12 @@ MiReadPage(PMEMORY_AREA MemoryArea, * filesystems do because it is safe for us to use an offset with a * alignment less than the file system block size. */ - Status = CcRosGetCacheSegment(Fcb->Bcb, - Offset->u.LowPart, - &BaseOffset, - &BaseAddress, - &UptoDate, - &CacheSeg); + Status = CcRosGetCacheSegment(Bcb, + Offset->u.LowPart, + &BaseOffset, + &BaseAddress, + &UptoDate, + &CacheSeg); if (!NT_SUCCESS(Status)) { return(Status); @@ -365,7 +365,7 @@ MiReadPage(PMEMORY_AREA MemoryArea, Status = ReadCacheSegment(CacheSeg); if (!NT_SUCCESS(Status)) { - CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, FALSE, FALSE, FALSE); + CcRosReleaseCacheSegment(Bcb, CacheSeg, FALSE, FALSE, FALSE); return Status; } } @@ -377,7 +377,7 @@ MiReadPage(PMEMORY_AREA MemoryArea, (*Page) = Addr; MmReferencePage((*Page)); - CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, TRUE, FALSE, TRUE); + CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, TRUE); } else { @@ -393,12 +393,12 @@ MiReadPage(PMEMORY_AREA MemoryArea, return(Status); } - Status = CcRosGetCacheSegment(Fcb->Bcb, - Offset->u.LowPart, - &BaseOffset, - &BaseAddress, - &UptoDate, - &CacheSeg); + Status = CcRosGetCacheSegment(Bcb, + Offset->u.LowPart, + &BaseOffset, + &BaseAddress, + &UptoDate, + &CacheSeg); if (!NT_SUCCESS(Status)) { return(Status); @@ -412,7 +412,7 @@ MiReadPage(PMEMORY_AREA MemoryArea, Status = ReadCacheSegment(CacheSeg); if (!NT_SUCCESS(Status)) { - CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, FALSE, FALSE, FALSE); + CcRosReleaseCacheSegment(Bcb, CacheSeg, FALSE, FALSE, FALSE); return Status; } } @@ -425,13 +425,13 @@ MiReadPage(PMEMORY_AREA MemoryArea, else { memcpy(PageAddr, BaseAddress + Offset->u.LowPart - BaseOffset, OffsetInPage); - CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, TRUE, FALSE, FALSE); - Status = CcRosGetCacheSegment(Fcb->Bcb, - Offset->u.LowPart + OffsetInPage, - &BaseOffset, - &BaseAddress, - &UptoDate, - &CacheSeg); + CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE); + Status = CcRosGetCacheSegment(Bcb, + Offset->u.LowPart + OffsetInPage, + &BaseOffset, + &BaseAddress, + &UptoDate, + &CacheSeg); if (!NT_SUCCESS(Status)) { ExUnmapPage(PageAddr); @@ -446,14 +446,14 @@ MiReadPage(PMEMORY_AREA MemoryArea, Status = ReadCacheSegment(CacheSeg); if (!NT_SUCCESS(Status)) { - CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, FALSE, FALSE, FALSE); + CcRosReleaseCacheSegment(Bcb, CacheSeg, FALSE, FALSE, FALSE); ExUnmapPage(PageAddr); return Status; } } memcpy(PageAddr + OffsetInPage, BaseAddress, PAGE_SIZE - OffsetInPage); } - CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, TRUE, FALSE, FALSE); + CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, FALSE); ExUnmapPage(PageAddr); } return(STATUS_SUCCESS); @@ -1571,7 +1571,7 @@ MmWritePageSectionView(PMADDRESS_SPACE AddressSpace, BOOLEAN Private; NTSTATUS Status; PFILE_OBJECT FileObject; - PREACTOS_COMMON_FCB_HEADER Fcb = NULL; + PBCB Bcb = NULL; BOOLEAN DirectMapped; Address = (PVOID)PAGE_ROUND_DOWN(Address); @@ -1583,7 +1583,7 @@ MmWritePageSectionView(PMADDRESS_SPACE AddressSpace, DirectMapped = FALSE; if (FileObject != NULL) { - Fcb = (PREACTOS_COMMON_FCB_HEADER)FileObject->FsContext; + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; /* * If the file system is letting us go directly to the cache and the @@ -1654,7 +1654,7 @@ MmWritePageSectionView(PMADDRESS_SPACE AddressSpace, if (DirectMapped && !Private) { assert(SwapEntry == 0); - CcRosMarkDirtyCacheSegment(Fcb->Bcb, Offset.u.LowPart); + CcRosMarkDirtyCacheSegment(Bcb, Offset.u.LowPart); PageOp->Status = STATUS_SUCCESS; KeSetEvent(&PageOp->CompletionEvent, IO_NO_INCREMENT, FALSE); MmReleasePageOp(PageOp); @@ -2940,7 +2940,7 @@ MmFreeSectionPage(PVOID Context, MEMORY_AREA* MemoryArea, PVOID Address, PMEMORY_AREA MArea; ULONG Entry; PFILE_OBJECT FileObject; - PREACTOS_COMMON_FCB_HEADER Fcb; + PBCB Bcb; ULONG Offset; SWAPENTRY SavedSwapEntry; PMM_PAGEOP PageOp; @@ -2978,8 +2978,8 @@ MmFreeSectionPage(PVOID Context, MEMORY_AREA* MemoryArea, PVOID Address, if (PhysAddr.QuadPart == PAGE_FROM_SSE(Entry) && Dirty) { FileObject = MemoryArea->Data.SectionData.Section->FileObject; - Fcb = (PREACTOS_COMMON_FCB_HEADER)FileObject->FsContext; - CcRosMarkDirtyCacheSegment(Fcb->Bcb, Offset); + Bcb = FileObject->SectionObjectPointers->SharedCacheMap; + CcRosMarkDirtyCacheSegment(Bcb, Offset); assert(SwapEntry == 0); } } @@ -3232,6 +3232,7 @@ NtExtendSection(IN HANDLE SectionHandle, IN ULONG NewMaximumSize) { UNIMPLEMENTED; + return(STATUS_NOT_IMPLEMENTED); } diff --git a/reactos/ntoskrnl/ntoskrnl.def b/reactos/ntoskrnl/ntoskrnl.def index 2293d3f892c..b5ef1cb15f1 100644 --- a/reactos/ntoskrnl/ntoskrnl.def +++ b/reactos/ntoskrnl/ntoskrnl.def @@ -1,14 +1,12 @@ -; $Id: ntoskrnl.def,v 1.146 2003/01/07 17:48:11 robd Exp $ +; $Id: ntoskrnl.def,v 1.147 2003/02/13 22:24:19 hbirr Exp $ ; ; reactos/ntoskrnl/ntoskrnl.def ; ; ReactOS Operating System ; EXPORTS -CcRosInitializeFileCache@12 -;CcRosRequestCacheSegment@20 -;CcRosReleaseCacheSegment@12 -CcRosReleaseFileCache@8 +CcRosInitializeFileCache@8 +CcRosReleaseFileCache@4 CcCopyRead@24 CcCopyWrite@20 CcFlushCache@16 diff --git a/reactos/ntoskrnl/ntoskrnl.edf b/reactos/ntoskrnl/ntoskrnl.edf index c51c475e04e..5eef88e765d 100644 --- a/reactos/ntoskrnl/ntoskrnl.edf +++ b/reactos/ntoskrnl/ntoskrnl.edf @@ -1,15 +1,13 @@ -; $Id: ntoskrnl.edf,v 1.132 2003/01/07 17:48:11 robd Exp $ +; $Id: ntoskrnl.edf,v 1.133 2003/02/13 22:24:19 hbirr Exp $ ; ; reactos/ntoskrnl/ntoskrnl.def ; ; ReactOS Operating System ; EXPORTS -CcRosInitializeFileCache=CcRosInitializeFileCache@12 +CcRosInitializeFileCache=CcRosInitializeFileCache@8 CcMdlReadComplete=CcMdlReadComplete@8 -;CcRosRequestCacheSegment=CcRosRequestCacheSegment@20 -;CcRosReleaseCacheSegment=CcRosReleaseCacheSegment@12 -CcRosReleaseFileCache=CcRosReleaseFileCache@8 +CcRosReleaseFileCache=CcRosReleaseFileCache@4 CcCopyRead=CcCopyRead@24 CcCopyWrite=CcCopyWrite@20 CcFlushCache=CcFlushCache@16