PVFATCCB newCCB;
NTSTATUS status;
BOOLEAN Acquired;
+ NTSTATUS Status;
/* Don't re-initialize if already done */
if (BooleanFlagOn(fcb->Flags, FCB_CACHE_INITIALIZED))
newCCB = ExAllocateFromNPagedLookasideList(&VfatGlobalData->CcbLookasideList);
if (newCCB == NULL)
{
+ Status = STATUS_INSUFFICIENT_RESOURCES;
ObDereferenceObject(fileObject);
- return STATUS_INSUFFICIENT_RESOURCES;
+ goto Quit;
}
RtlZeroMemory(newCCB, sizeof (VFATCCB));
fcb->FileObject = NULL;
ExFreeToNPagedLookasideList(&VfatGlobalData->CcbLookasideList, newCCB);
ObDereferenceObject(fileObject);
+ if (Acquired)
+ {
+ ExReleaseResourceLite(&vcb->DirResource);
+ }
return status;
}
_SEH2_END;
vfatGrabFCB(vcb, fcb);
SetFlag(fcb->Flags, FCB_CACHE_INITIALIZED);
+ Status = STATUS_SUCCESS;
+Quit:
if (Acquired)
{
ExReleaseResourceLite(&vcb->DirResource);
}
- return STATUS_SUCCESS;
+ return Status;
}
/*
}
/* No need to init cache here, vfatFindDirSpace() will have done it for us */
+ ASSERT(BooleanFlagOn(ParentFcb->Flags, FCB_CACHE_INITIALIZED));
i = DeviceExt->FatInfo.BytesPerCluster / sizeof(FAT_DIR_ENTRY);
FileOffset.u.HighPart = 0;
Status = vfatFCBInitializeCacheFromVolume(DeviceExt, (*Fcb));
if (!NT_SUCCESS(Status))
{
+ ExFreePoolWithTag(Buffer, TAG_VFAT);
return Status;
}
}
/* No need to init cache here, vfatFindDirSpace() will have done it for us */
+ ASSERT(BooleanFlagOn(ParentFcb->Flags, FCB_CACHE_INITIALIZED));
/* add entry into parent directory */
FileOffset.u.HighPart = 0;