diff --git a/drivers/filesystems/fastfat/fcb.c b/drivers/filesystems/fastfat/fcb.c index a791c27a40..2becb75c22 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,8 +365,6 @@ _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); @@ -372,13 +372,12 @@ _vfatReleaseFCB( if (RefCount == 1 && BooleanFlagOn(pFCB->Flags, FCB_CACHE_INITIALIZED)) { - PFILE_OBJECT tmpFileObject; + ClearFlag(pFCB->Flags, FCB_CACHE_INITIALIZED); tmpFileObject = pFCB->FileObject; - pFCB->FileObject = NULL; CcUninitializeCacheMap(tmpFileObject, NULL, NULL); - ClearFlag(pFCB->Flags, FCB_CACHE_INITIALIZED); ObDereferenceObject(tmpFileObject); + break; } if (RefCount == 0) @@ -387,12 +386,12 @@ _vfatReleaseFCB( tmpFcb = pFCB->parentFcb; vfatDelFCBFromTable(pVCB, pFCB); vfatDestroyFCB(pFCB); + pFCB = tmpFcb; } else { - tmpFcb = NULL; + break; } - pFCB = tmpFcb; } }