DirtySegmentListEntry);
current_entry = current_entry->Flink;
+ CcRosCacheSegmentIncRefCount(current);
+
Locked = current->Bcb->Callbacks->AcquireForLazyWrite(
current->Bcb->LazyWriteContext, Wait);
if (!Locked)
{
+ CcRosCacheSegmentDecRefCount(current);
continue;
}
{
current->Bcb->Callbacks->ReleaseFromLazyWrite(
current->Bcb->LazyWriteContext);
+ CcRosCacheSegmentDecRefCount(current);
continue;
}
KeReleaseMutex(¤t->Mutex, 0);
current->Bcb->Callbacks->ReleaseFromLazyWrite(
current->Bcb->LazyWriteContext);
+ CcRosCacheSegmentDecRefCount(current);
continue;
}
KeReleaseMutex(¤t->Mutex, 0);
current->Bcb->Callbacks->ReleaseFromLazyWrite(
current->Bcb->LazyWriteContext);
+
+ KeAcquireGuardedMutex(&ViewLock);
+ CcRosCacheSegmentDecRefCount(current);
if (!NT_SUCCESS(Status) && (Status != STATUS_END_OF_FILE))
{
(*Count) += PagesPerSegment;
Target -= PagesPerSegment;
}
-
- KeAcquireGuardedMutex(&ViewLock);
+
current_entry = DirtySegmentListHead.Flink;
}