WasDirty = FALSE;
if (Dirty)
{
- if (!Vacb->Dirty && Dirty)
+ if (!Vacb->Dirty)
{
CcRosMarkDirtyVacb(Vacb);
}
CcRosMarkDirtyVacb(Vacb);
-
CcRosReleaseVacbLock(Vacb);
return STATUS_SUCCESS;
WasDirty = FALSE;
if (NowDirty)
{
- if (!Vacb->Dirty && NowDirty)
+ if (!Vacb->Dirty)
{
CcRosMarkDirtyVacb(Vacb);
}
while (!IsListEmpty(&SharedCacheMap->CacheMapVacbListHead))
{
current_entry = RemoveTailList(&SharedCacheMap->CacheMapVacbListHead);
+ KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldIrql);
+
current = CONTAINING_RECORD(current_entry, ROS_VACB, CacheMapVacbListEntry);
+ CcRosAcquireVacbLock(current, NULL);
RemoveEntryList(¤t->VacbLruListEntry);
if (current->Dirty)
{
DPRINT1("Freeing dirty VACB\n");
}
InsertHeadList(&FreeList, ¤t->CacheMapVacbListEntry);
+ CcRosReleaseVacbLock(current);
+
+ KeAcquireSpinLock(&SharedCacheMap->CacheMapLock, &oldIrql);
}
#if DBG
SharedCacheMap->Trace = FALSE;