- The bcb field is removed from the REACTOS_COMMON_FCB_HEADER structure.
- FSD's store the pointer to the fcb in FsContext from file object. There is no pointer from ccb to the fcb.
svn path=/trunk/; revision=4145
typedef struct _CCB
{
- PFCB Fcb;
LIST_ENTRY NextCCB;
PFILE_OBJECT PtrFileObject;
LARGE_INTEGER CurrentByteOffset;
* 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
* 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;
* 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
*/
{
PCCB Ccb;
-
+
DPRINT("CdfsCloseFile(DeviceExt %x, FileObject %x)\n",
DeviceExt,
FileObject);
// 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)
* 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
{
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
ULONG RequestedDisposition;
ULONG RequestedOptions;
PFCB Fcb;
- PCCB Ccb;
// PWSTR FileName;
NTSTATUS Status;
if (NT_SUCCESS(Status))
{
- Ccb = FileObject->FsContext2;
- Fcb = Ccb->Fcb;
+ Fcb = FileObject->FsContext;
/*
* Check the file has the requested attributes
*/
* 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
FileObject = Stack->FileObject;
Ccb = (PCCB)FileObject->FsContext2;
- Fcb = Ccb->Fcb;
+ Fcb = (PFCB)FileObject->FsContext;
/* Obtain the callers parameters */
BufferLength = Stack->Parameters.QueryDirectory.Length;
* 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
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);
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))
{
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))
{
* 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
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;
Fcb->Entry.DataLengthL = (DeviceExt->CdInfo.VolumeSpaceSize + DeviceExt->CdInfo.VolumeOffset) * BLOCKSIZE;
Status = CcRosInitializeFileCache(DeviceExt->StreamFileObject,
- &Fcb->RFCB.Bcb,
PAGE_SIZE);
if (!NT_SUCCESS (Status))
{
* 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
return(STATUS_SUCCESS);
Ccb = (PCCB)FileObject->FsContext2;
- Fcb = Ccb->Fcb;
+ Fcb = (PFCB)FileObject->FsContext;
if (ReadOffset >= Fcb->Entry.DataLengthL)
return(STATUS_END_OF_FILE);
Length = Fcb->Entry.DataLengthL - ReadOffset;
if (FileObject->PrivateCacheMap == NULL)
{
- CcRosInitializeFileCache(FileObject, &Fcb->RFCB.Bcb, PAGE_SIZE);
+ CcRosInitializeFileCache(FileObject, PAGE_SIZE);
}
FileOffset.QuadPart = (LONGLONG)ReadOffset;
* 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
{
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
* 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
FileObject = Stack->FileObject;
Ccb = (PCCB)FileObject->FsContext2;
- Fcb = Ccb->Fcb;
+ Fcb = (PFCB)FileObject->FsContext;
/* Obtain the callers parameters */
BufferLength = Stack->Parameters.QueryDirectory.Length;
* 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
if (Fcb->RefCount <= 0 && !NtfsFCBIsDirectory(Fcb))
{
RemoveEntryList(&Fcb->FcbListEntry);
- CcRosReleaseFileCache(NULL, Fcb->RFCB.Bcb);
+ CcRosReleaseFileCache(Fcb->FileObject);
NtfsDestroyFCB(Fcb);
}
KeReleaseSpinLock(&Vcb->FcbListLock, oldIrql);
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);
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))
{
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))
{
* 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
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;
// Fcb->Entry.DataLengthL = DeviceExt->CdInfo.VolumeSpaceSize * BLOCKSIZE;
Status = CcRosInitializeFileCache(DeviceExt->StreamFileObject,
- &Fcb->RFCB.Bcb,
CACHEPAGESIZE(DeviceExt));
if (!NT_SUCCESS (Status))
{
typedef struct _CCB
{
- PFCB Fcb;
LIST_ENTRY NextCCB;
PFILE_OBJECT PtrFileObject;
LARGE_INTEGER CurrentByteOffset;
-/* $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
* FUNCTION: Cleans up after a file has been closed.
*/
{
- PVFATCCB pCcb;
PVFATFCB pFcb;
PDEVICE_EXTENSION DeviceExt = IrpContext->DeviceExt;
PFILE_OBJECT FileObject = IrpContext->FileObject;
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 (FileObject->PrivateCacheMap)
+ {
+ CcRosReleaseFileCache (FileObject);
+ }
}
-
- /* Uninitialize file cache if initialized for this file object. */
- if (pFcb->RFCB.Bcb != NULL)
- {
- CcRosReleaseFileCache (FileObject, pFcb->RFCB.Bcb);
- }
-
return STATUS_SUCCESS;
}
-/* $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
/* 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");
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;
}
* 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
{
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
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;
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,
return(STATUS_OBJECT_NAME_COLLISION);
}
- pCcb = FileObject->FsContext2;
- pFcb = pCcb->pFcb;
+ pFcb = FileObject->FsContext;
/*
* Check the file has the requested attributes
/*
- * $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
BOOLEAN First = FALSE;
pCcb = (PVFATCCB) IrpContext->FileObject->FsContext2;
- pFcb = pCcb->pFcb;
+ pFcb = (PVFATFCB) IrpContext->FileObject->FsContext;
if (!ExAcquireResourceSharedLite(&pFcb->MainResource, IrpContext->Flags & IRPCONTEXT_CANWAIT))
{
-/* $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
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);
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);
}
return status;
}
- pName = ((PVFATCCB)(pFileObject->FsContext2))->pFcb->ObjectName;
+ pName = ((PVFATFCB)pFileObject->FsContext)->ObjectName;
if (*pName == L'\\')
{
pName ++;
-/* $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
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);
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];
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))
{
CurrentCluster = FirstCluster = pVCB->FatInfo.RootCluster;
FCB->entry.FirstCluster = FirstCluster & 0xffff;
FCB->entry.FirstClusterHigh = FirstCluster >> 16;
- CurrentCluster = FirstCluster;
while (CurrentCluster != 0xffffffff && NT_SUCCESS(Status))
{
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;
-/* $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
/* 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;
/* 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);
-/* $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
{
PLIST_ENTRY ListEntry;
PVFATFCB Fcb;
- PVFATCCB Ccb;
NTSTATUS Status, ReturnStatus = STATUS_SUCCESS;
DPRINT("VfatFlushVolume(DeviceExt %x, FatFcb %x)\n", DeviceExt, 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);
{
NTSTATUS Status;
PVFATFCB Fcb;
- PVFATCCB Ccb;
/*
* This request is not allowed on the main device object.
*/
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)
* 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
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;
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))
{
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);
-/* $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
)
{
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)
{
assert (DeviceObject);
assert (Irp);
-
- FsRtlEnterFileSystem();
IrpContext = VfatAllocateIrpContext(DeviceObject, Irp);
if (IrpContext == NULL)
{
}
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;
}
-/* $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
*LengthRead = 0;
Ccb = (PVFATCCB)IrpContext->FileObject->FsContext2;
- Fcb = Ccb->pFcb;
+ Fcb = IrpContext->FileObject->FsContext;
BytesPerSector = DeviceExt->FatInfo.BytesPerSector;
BytesPerCluster = DeviceExt->FatInfo.BytesPerCluster;
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;
{
NTSTATUS Status;
PVFATFCB Fcb;
- PVFATCCB Ccb;
ULONG Length;
ULONG ReturnedLength = 0;
PERESOURCE Resource = NULL;
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);
{
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,
NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext)
{
- PVFATCCB Ccb;
PVFATFCB Fcb;
PERESOURCE Resource = NULL;
LARGE_INTEGER ByteOffset;
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);
{
CacheSize = PAGE_SIZE;
}
- CcRosInitializeFileCache(IrpContext->FileObject, &Fcb->RFCB.Bcb, CacheSize);
+ CcRosInitializeFileCache(IrpContext->FileObject, CacheSize);
}
if (ByteOffset.QuadPart > OldFileSize.QuadPart)
{
-/* $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 <ddk/ntifs.h>
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. */
typedef struct _VFATCCB
{
- VFATFCB * pFcb;
- LIST_ENTRY NextCCB;
- PFILE_OBJECT PtrFileObject;
LARGE_INTEGER CurrentByteOffset;
/* for DirectoryControl */
ULONG Entry;
{
CSHORT NodeTypeCode;
CSHORT NodeByteSize;
- struct _BCB* Bcb;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
LARGE_INTEGER ValidDataLength;
#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 <ddk/cctypes.h>
-/* $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
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",
"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)
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 */
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 */
/* 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 *****************************************************************/
/**********************************************************************
PBCB Bcb;
PLIST_ENTRY current_entry;
PCACHE_SEGMENT current;
+ LIST_ENTRY FreeListHead;
+ NTSTATUS Status;
DPRINT("CcSetFileSizes(FileObject %x, FileSizes %x)\n",
FileObject, FileSizes);
(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);
+ }
}
-/* $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
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",
* 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
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)
}
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;
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);
* 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
if (SHARE_COUNT_FROM_SSE(Entry) == 0)
{
PFILE_OBJECT FileObject;
- PREACTOS_COMMON_FCB_HEADER Fcb;
+ PBCB Bcb;
SWAPENTRY SavedSwapEntry;
PHYSICAL_ADDRESS Page;
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);
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
* 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);
Status = ReadCacheSegment(CacheSeg);
if (!NT_SUCCESS(Status))
{
- CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, FALSE, FALSE, FALSE);
+ CcRosReleaseCacheSegment(Bcb, CacheSeg, FALSE, FALSE, FALSE);
return Status;
}
}
(*Page) = Addr;
MmReferencePage((*Page));
- CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, TRUE, FALSE, TRUE);
+ CcRosReleaseCacheSegment(Bcb, CacheSeg, TRUE, FALSE, TRUE);
}
else
{
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);
Status = ReadCacheSegment(CacheSeg);
if (!NT_SUCCESS(Status))
{
- CcRosReleaseCacheSegment(Fcb->Bcb, CacheSeg, FALSE, FALSE, FALSE);
+ CcRosReleaseCacheSegment(Bcb, CacheSeg, FALSE, FALSE, FALSE);
return Status;
}
}
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);
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);
BOOLEAN Private;
NTSTATUS Status;
PFILE_OBJECT FileObject;
- PREACTOS_COMMON_FCB_HEADER Fcb = NULL;
+ PBCB Bcb = NULL;
BOOLEAN DirectMapped;
Address = (PVOID)PAGE_ROUND_DOWN(Address);
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
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);
PMEMORY_AREA MArea;
ULONG Entry;
PFILE_OBJECT FileObject;
- PREACTOS_COMMON_FCB_HEADER Fcb;
+ PBCB Bcb;
ULONG Offset;
SWAPENTRY SavedSwapEntry;
PMM_PAGEOP PageOp;
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);
}
}
IN ULONG NewMaximumSize)
{
UNIMPLEMENTED;
+ return(STATUS_NOT_IMPLEMENTED);
}
-; $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
-; $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