}
cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
- if ((bLastHandle || bFlushFile) &&
+ if (bLastHandle && (scp->fileType == CM_SCACHETYPE_FILE) &&
scp->redirBufCount > 0)
{
LARGE_INTEGER heldExtents;
/* If not a readonly object, flush dirty data and update metadata */
if (!(scp->flags & CM_SCACHEFLAG_RO)) {
- if ((bLastHandle || bFlushFile) &&
- buf_DirtyBuffersExist(&scp->fid)) {
- if (!bScpLocked) {
- lock_ObtainWrite(&scp->rw);
- bScpLocked = TRUE;
- }
- code = cm_SyncOp(scp, NULL, userp, &req, PRSFS_WRITE,
- CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);
+ if ((scp->fileType == CM_SCACHETYPE_FILE) && (bLastHandle || bFlushFile)) {
+ /* Serialize with any outstanding AsyncStore operation */
+ code = cm_SyncOp(scp, NULL, userp, &req, 0, CM_SCACHESYNC_ASYNCSTORE);
if (code == 0) {
if (bScpLocked) {
lock_ReleaseWrite(&scp->rw);
memcpy(&pResultCB->VolumeCreationTime, &ft, sizeof(ft));
pResultCB->AvailableAllocationUnits.QuadPart = 0;
- pResultCB->Characteristics |= FILE_READ_ONLY_DEVICE;
+ pResultCB->FileSystemAttributes |= FILE_READ_ONLY_VOLUME;
pResultCB->VolumeLabelLength = cm_Utf8ToUtf16( "Freelance.Local.Root", -1, pResultCB->VolumeLabel,
(sizeof(pResultCB->VolumeLabel) / sizeof(WCHAR)) + 1);
}
volType = cm_VolumeType(volp, scp->fid.volume);
- pResultCB->Characteristics |= ((volType == ROVOL || volType == BACKVOL) ? FILE_READ_ONLY_DEVICE : 0);
+ if (volType == ROVOL || volType == BACKVOL)
+ pResultCB->FileSystemAttributes |= FILE_READ_ONLY_VOLUME;
code = cm_SyncOp(scp, NULL, userp, &req, PRSFS_READ,
CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS);