}
#include <RDRPrototypes.h>
+static DWORD
+RDR_SetFileStatus2( AFSFileID * pFileId,
+ GUID *pAuthGroup,
+ DWORD dwStatus);
+
#ifndef FlagOn
#define FlagOn(_F,_SF) ((_F) & (_SF))
#endif
if (dwRet == ERROR_SUCCESS) {
RDR_InitIoctl();
+ RDR_InitPipe();
}
return dwRet;
// log the error, nothing to do
}
+
+ RDR_ShutdownIoctl();
+ RDR_ShutdownPipe();
+
return 0;
}
break;
}
+ case AFS_REQUEST_TYPE_GET_VOLUME_SIZE_INFO:
+ {
+ if (afsd_logp->enabled) {
+ swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_GET_VOLUME_SIZE_INFO Index %08lX File %08lX.%08lX.%08lX.%08lX",
+ RequestBuffer->RequestIndex,
+ RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+ RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+
+ osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
+ }
+
+ RDR_GetVolumeSizeInfo( userp,
+ RequestBuffer->FileId,
+ bWow64,
+ RequestBuffer->ResultBufferLength,
+ &pResultCB);
+ break;
+ }
+
case AFS_REQUEST_TYPE_HOLD_FID:
{
osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
}
- sprintf( pBuffer,
- "Failed to post IOCTL_AFS_PROCESS_IRP_RESULT gle %X",
- GetLastError());
- osi_panic(pBuffer, __FILE__, __LINE__);
+ if (gle != ERROR_NOT_READY) {
+ sprintf( pBuffer,
+ "Failed to post IOCTL_AFS_PROCESS_IRP_RESULT gle %X",
+ GetLastError());
+ osi_panic(pBuffer, __FILE__, __LINE__);
+ }
}
}
dwResultBufferLength);
}
- if (gle != ERROR_GEN_FAILURE) {
+ if (gle != ERROR_GEN_FAILURE &&
+ gle != ERROR_NOT_READY) {
sprintf( pBuffer,
"Failed to post IOCTL_AFS_SET_FILE_EXTENTS gle %X",
gle);
osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
}
- RDR_SetFileStatus( (cm_fid_t *)&RequestBuffer->FileId, STATUS_NO_MEMORY);
+ RDR_SetFileStatus2( &RequestBuffer->FileId, &RequestBuffer->AuthGroup, STATUS_NO_MEMORY);
}
}
else if (RequestBuffer->RequestType == AFS_REQUEST_TYPE_BYTE_RANGE_LOCK) {
}
- // TODO - instead of a panic we should release the locks
- sprintf( pBuffer,
- "Failed to post IOCTL_AFS_SET_BYTE_RANGE_LOCKS gle %X", gle);
- osi_panic(pBuffer, __FILE__, __LINE__);
+ if (gle != ERROR_NOT_READY) {
+ // TODO - instead of a panic we should release the locks
+ sprintf( pBuffer,
+ "Failed to post IOCTL_AFS_SET_BYTE_RANGE_LOCKS gle %X", gle);
+ osi_panic(pBuffer, __FILE__, __LINE__);
+ }
}
free(SetByteRangeLockResultCB);
extern "C" DWORD
RDR_SetFileStatus( cm_fid_t *fidp,
+ GUID *pAuthGroup,
DWORD dwStatus)
{
WCHAR wchBuffer[1024];
DWORD gle;
RDR_fid2FID(fidp, &SetFileStatusCB.FileId);
+ memcpy(&SetFileStatusCB.AuthGroup, pAuthGroup, sizeof(GUID));
SetFileStatusCB.FailureStatus = dwStatus;
if (afsd_logp->enabled) {
return 0;
}
+static DWORD
+RDR_SetFileStatus2( AFSFileID *pFileId,
+ GUID *pAuthGroup,
+ DWORD dwStatus)
+{
+ WCHAR wchBuffer[1024];
+ AFSExtentFailureCB SetFileStatusCB;
+ DWORD bytesReturned;
+ DWORD gle;
+
+ memcpy(&SetFileStatusCB.FileId, pFileId, sizeof(AFSFileID));
+ memcpy(&SetFileStatusCB.AuthGroup, pAuthGroup, sizeof(GUID));
+ SetFileStatusCB.FailureStatus = dwStatus;
+
+ if (afsd_logp->enabled) {
+ swprintf( wchBuffer, L"RDR_SetFileStatus2 IOCTL_AFS_EXTENT_FAILURE_CB Fid %08lX.%08lX.%08lX.%08lX Status 0x%lX",
+ SetFileStatusCB.FileId.Cell, SetFileStatusCB.FileId.Volume,
+ SetFileStatusCB.FileId.Vnode, SetFileStatusCB.FileId.Unique,
+ dwStatus);
+
+ osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
+ }
+
+ if( !RDR_DeviceIoControl( glDevHandle,
+ IOCTL_AFS_SET_FILE_EXTENT_FAILURE,
+ (void *)&SetFileStatusCB,
+ sizeof(AFSExtentFailureCB),
+ (void *)NULL,
+ 0,
+ &bytesReturned ))
+ {
+ gle = GetLastError();
+ return gle;
+ }
+
+ return 0;
+}
extern "C" DWORD
RDR_RequestExtentRelease(cm_fid_t *fidp, LARGE_INTEGER numOfHeldExtents, DWORD numOfExtents, AFSFileExtentCB *extentList)