diff --git a/drivers/filesystems/fastfat/fcb.c b/drivers/filesystems/fastfat/fcb.c index a791c27a40..0f3e626712 100644 --- a/drivers/filesystems/fastfat/fcb.c +++ b/drivers/filesystems/fastfat/fcb.c @@ -348,6 +348,8 @@ _vfatReleaseFCB( ) { PVFATFCB tmpFcb; + ULONG RefCount; + PFILE_OBJECT tmpFileObject; #ifdef KDBG if (DebugFile.Buffer != NULL && FsRtlIsNameInExpression(&DebugFile, &pFCB->LongNameU, FALSE, NULL)) @@ -363,26 +365,23 @@ _vfatReleaseFCB( while (pFCB) { - ULONG RefCount; - ASSERT(!BooleanFlagOn(pFCB->Flags, FCB_IS_FAT)); ASSERT(pFCB != pVCB->VolumeFcb && !BooleanFlagOn(pFCB->Flags, FCB_IS_VOLUME)); ASSERT(pFCB->RefCount > 0); RefCount = --pFCB->RefCount; - if (RefCount == 1 && BooleanFlagOn(pFCB->Flags, FCB_CACHE_INITIALIZED)) + if (RefCount == 0) { - PFILE_OBJECT tmpFileObject; - tmpFileObject = pFCB->FileObject; + if (BooleanFlagOn(pFCB->Flags, FCB_CACHE_INITIALIZED)) + { + ClearFlag(pFCB->Flags, FCB_CACHE_INITIALIZED); - pFCB->FileObject = NULL; - CcUninitializeCacheMap(tmpFileObject, NULL, NULL); - ClearFlag(pFCB->Flags, FCB_CACHE_INITIALIZED); - ObDereferenceObject(tmpFileObject); - } + tmpFileObject = pFCB->FileObject; + pFCB->FileObject = NULL; + CcUninitializeCacheMap(tmpFileObject, NULL, NULL); + ObDereferenceObject(tmpFileObject); + } - if (RefCount == 0) - { ASSERT(pFCB->OpenHandleCount == 0); tmpFcb = pFCB->parentFcb; vfatDelFCBFromTable(pVCB, pFCB);