BOOLEAN xixfs_IHaveLotLock( IN uint8 * HostMac, IN uint64 LotNumber, IN uint8 * VolumeId ) { NTSTATUS RC = STATUS_UNSUCCESSFUL; PXIXFSDG_PKT pPacket = NULL; PXIXFS_LOCK_BROADCAST pPacketData = NULL; uint8 DstAddress[6] ={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; //PAGED_CODE(); DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Enter xixfs_IHaveLotLock \n")); // Changed by ILGU HONG // chesung suggest /* if(FALSE ==xixfs_AllocDGPkt(&pPacket, HostMac, DstAddress, XIXFS_TYPE_LOCK_BROADCAST)) { return FALSE; } */ if(FALSE ==xixfs_AllocDGPkt(&pPacket, HostMac, NULL, XIXFS_TYPE_LOCK_BROADCAST)) { return FALSE; } pPacketData = &(pPacket->RawDataDG.LockBroadcast); // Changed by ILGU HONG RtlCopyMemory(pPacketData->VolumeId, VolumeId, 16); pPacketData->LotNumber = HTONLL(LotNumber); pPacket->TimeOut.QuadPart = xixcore_GetCurrentTime64() + DEFAULT_REQUEST_MAX_TIMEOUT; ExAcquireFastMutexUnsafe(&XiGlobalData.XifsComCtx.SendPktListMutex); InsertTailList(&(XiGlobalData.XifsComCtx.SendPktList), &(pPacket->PktListEntry) ); ExReleaseFastMutexUnsafe(&XiGlobalData.XifsComCtx.SendPktListMutex); KeSetEvent(&(XiGlobalData.XifsComCtx.CliSendDataEvent),0, FALSE); DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Exit xixfs_IHaveLotLock \n")); return TRUE; }
int xixcore_call xixcore_HaveLotLock( uint8 * HostMac, uint8 * LockOwnerMac, uint64 LotNumber, uint8 * VolumeId, uint8 * LockOwnerId ) { // Request LotLock state to Lock Owner int RC = 0; PXIXFSDG_PKT pPacket = NULL; PXIXFS_LOCK_REQUEST pPacketData = NULL; int waitStatus = LOCK_INVALID; DECLARE_COMPLETION(wait); DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Enter xixfs_AreYouHaveLotLock \n")); RC = xixfs_AllocDGPkt( &pPacket, HostMac, LockOwnerMac, XIXFS_TYPE_LOCK_REQUEST ) ; if(RC < 0 ) { DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("Error (0x%x) xixfs_AreYouHaveLotLock:xixfs_AllocDGPkt \n", RC)); return RC; } // Changed by ILGU HONG // chesung suggest DebugTrace(DEBUG_LEVEL_INFO, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Packet Dest Info [0x%02x:%02x:%02x:%02x:%02x:%02x]\n", LockOwnerMac[26], LockOwnerMac[27], LockOwnerMac[28], LockOwnerMac[29], LockOwnerMac[30], LockOwnerMac[31])); pPacketData = &(pPacket->RawDataDG.LockReq); memcpy(pPacketData->LotOwnerID, LockOwnerId, 6); // Changed by ILGU HONG // chesung suggest memcpy(pPacketData->VolumeId, VolumeId, 16); memcpy(pPacketData->LotOwnerMac, LockOwnerMac, 32); pPacketData->LotNumber = XI_HTONLL(LotNumber); pPacketData->PacketNumber = XI_HTONL(atomic_read(&(xixfs_linux_global.EventCtx.PacketNumber))); atomic_inc(&(xixfs_linux_global.EventCtx.PacketNumber)); pPacket->TimeOut = xixcore_GetCurrentTime64()+ DEFAULT_REQUEST_MAX_TIMEOUT; pPacket->PkCtl.PktCompletion = &wait; pPacket->PkCtl.status=&waitStatus; printk(KERN_DEBUG "WAIT lock request\n"); xixfs_Pkt_add_sendqueue( &xixfs_linux_global.EventCtx, pPacket ); wait_for_completion(&wait); printk(KERN_DEBUG "END WAIT lock request\n"); if(waitStatus == LOCK_OWNED_BY_OWNER){ DebugTrace(DEBUG_LEVEL_CRITICAL, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Exit xixfs_AreYouHaveLotLock Lock is realy acquired by other \n")); return 1; }else{ DebugTrace(DEBUG_LEVEL_CRITICAL, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Exit XifsdAreYouHaveLotLock Lock is status(0x%x) \n", waitStatus)); return 0; } }
int xixcore_call xixcore_CreateNewFile( PXIXCORE_VCB pVCB, PXIXCORE_FCB pDir, xc_uint32 bIsFile, xc_uint8 * Name, xc_uint32 NameLength, xc_uint32 FileAttribute, PXIXCORE_DIR_EMUL_CONTEXT DirContext, xc_uint64 *NewFileId ) { int RC = 0; PXIXCORE_BUFFER xbuf = NULL; PXIXCORE_BUFFER LotHeader = NULL; xc_int64 BeginingLotIndex = 0; xc_uint32 bLotAlloc = 0; xc_uint32 IsDirSet = 0; xc_uint32 ChildType = 0; xc_uint64 ChildIndex = 0; xc_int32 Reason = 0; PXIDISK_COMMON_LOT_HEADER pLotHeader = NULL; PXIDISK_FILE_INFO pFileInfo = NULL; PXIDISK_DIR_INFO pDirInfo = NULL; PXIDISK_ADDR_MAP pAddressMap = NULL; xc_uint32 AddrStartSectorIndex = 0; xc_uint64 EntryIndex = 0; DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_DIRINFO|DEBUG_TARGET_FCB|DEBUG_TARGET_FILEINFO), ("Enter xixcore_CreateNewFile \n")); XIXCORE_ASSERT_FCB(pDir); XIXCORE_ASSERT_VCB(pVCB); // Changed by ILGU HONG for readonly 09052006 if(pVCB->IsVolumeWriteProtected){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR xixcore_CreateNewFile : is read only .\n")); RC = XCCODE_EPERM; return RC; } // Changed by ILGU HONG for readonly end ChildType = (bIsFile)?(XIFS_FD_TYPE_FILE):(XIFS_FD_TYPE_DIRECTORY); if(NameLength > (XIFS_MAX_FILE_NAME_LENGTH * sizeof(xc_le16) )){ DebugTrace(DEBUG_LEVEL_INFO, (DEBUG_TARGET_DIRINFO|DEBUG_TARGET_FCB|DEBUG_TARGET_FILEINFO), ("FileNameLen(%d).\n", NameLength)); NameLength = XIFS_MAX_FILE_NAME_LENGTH * sizeof(xc_le16); } xbuf = xixcore_AllocateBuffer(XIDISK_DUP_FILE_INFO_SIZE); if(xbuf == NULL) { DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR xixcore_CreateNewFile : can't allocate xbuf .\n")); RC = XCCODE_ENOMEM; return RC; } LotHeader = xixcore_AllocateBuffer(XIDISK_DUP_COMMON_LOT_HEADER_SIZE); if(LotHeader == NULL) { xixcore_FreeBuffer(xbuf); DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR xixcore_CreateNewFile : can't allocate LotHeader .\n")); RC = XCCODE_ENOMEM; return RC; } RC = xixcore_FindDirEntry ( pVCB, pDir, (xc_uint8 *)Name, NameLength, DirContext, &EntryIndex, 1 ); if(RC >= 0){ RC = XCCODE_EPERM; goto error_out; } BeginingLotIndex = xixcore_AllocVCBLot(pVCB); if(BeginingLotIndex < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR xixcore_CreateNewFile : can't allocate lot.\n")); RC =XCCODE_ENOSPC; goto error_out; } bLotAlloc = 1; RC = xixcore_AddChildToDir( pVCB, pDir, BeginingLotIndex, ChildType, Name, NameLength, DirContext, &ChildIndex ); if( RC < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR(0x%x) xixcore_CreateNewFile : xixcore_AddChildToDir.\n", RC)); goto error_out; } IsDirSet =1; xixcore_ZeroBufferOffset(xbuf); memset(xixcore_GetDataBuffer(xbuf), 0,XIDISK_DUP_FILE_INFO_SIZE); xixcore_ZeroBufferOffset(LotHeader); memset(xixcore_GetDataBuffer(LotHeader), 0,XIDISK_DUP_COMMON_LOT_HEADER_SIZE); DebugTrace(DEBUG_LEVEL_INFO, (DEBUG_TARGET_DIRINFO|DEBUG_TARGET_FCB|DEBUG_TARGET_FILEINFO), ("Make File Info.\n")); RC = xixcore_RawReadLotHeader( pVCB->XixcoreBlockDevice, pVCB->LotSize, pVCB->SectorSize, pVCB->SectorSizeBit, BeginingLotIndex, LotHeader, &Reason ); if(RC < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR(0x%x) Reason(0x%x) xixcore_CreateNewFile : xixcore_RawWriteLotAndFileHeader.\n", RC, Reason)); if(RC == XCCODE_CRCERROR){ xixcore_ZeroBufferOffset(LotHeader); }else{ goto error_out; } } RC = xixcore_RawReadFileHeader( pVCB->XixcoreBlockDevice, pVCB->LotSize, pVCB->SectorSize, pVCB->SectorSizeBit, BeginingLotIndex, xbuf, &Reason ); if(RC < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR(0x%x) Reason(0x%x) xixcore_CreateNewFile : xixcore_RawWriteFileHeader.\n", RC, Reason)); if(RC == XCCODE_CRCERROR){ xixcore_ZeroBufferOffset(xbuf); }else{ goto error_out; } } if(ChildType == XIFS_FD_TYPE_FILE){ pFileInfo = (PXIDISK_FILE_INFO)xixcore_GetDataBufferWithOffset(xbuf); pLotHeader = (PXIDISK_COMMON_LOT_HEADER)xixcore_GetDataBufferWithOffset(LotHeader); xixcore_InitializeCommonLotHeader( pLotHeader, pVCB->VolumeLotSignature, LOT_INFO_TYPE_FILE, LOT_FLAG_BEGIN, BeginingLotIndex, BeginingLotIndex, 0, 0, 0, sizeof(XIDISK_FILE_HEADER), pVCB->LotSize - sizeof(XIDISK_FILE_HEADER) ); pLotHeader->Lock.LockState = XIDISK_LOCK_RELEASED; pLotHeader->Lock.LockAcquireTime=0; memcpy(pLotHeader->Lock.LockHostSignature, pVCB->HostId , 16); // Changed by ILGU HONG // chesung suggest //RtlCopyMemory(pLotHeader->Lock.LockHostMacAddress, PtrVCB->HostMac, 6); memcpy(pLotHeader->Lock.LockHostMacAddress, pVCB->HostMac, 32); memset(pFileInfo, 0, (XIDISK_COMMON_LOT_HEADER_SIZE - XIXCORE_MD5DIGEST_AND_SEQSIZE)); pFileInfo->Access_time = xixcore_GetCurrentTime64(); pFileInfo->Change_time = xixcore_GetCurrentTime64(); pFileInfo->Create_time = xixcore_GetCurrentTime64(); pFileInfo->Modified_time = xixcore_GetCurrentTime64(); memcpy(pFileInfo->OwnHostId , pVCB->HostId, 16); pFileInfo->ParentDirLotIndex = pDir->LotNumber; pFileInfo->LotIndex = BeginingLotIndex; pFileInfo->State = XIFS_FD_STATE_CREATE; pFileInfo->ACLState = 0; pFileInfo->FileAttribute = (FileAttribute|FILE_ATTRIBUTE_ARCHIVE); pFileInfo->AccessFlags = FILE_SHARE_READ; pFileInfo->FileSize = 0; pFileInfo->AllocationSize = pVCB->LotSize - XIDISK_FILE_HEADER_SIZE; pFileInfo->AddressMapIndex = 0; pFileInfo->LinkCount = 1; pFileInfo->NameSize = NameLength; pFileInfo->AddressMapIndex = 0; XIXCORE_SET_FLAGS(pFileInfo->Type, XIFS_FD_TYPE_FILE); memcpy(pFileInfo->Name, Name, NameLength); pFileInfo->AddressMapIndex = 0; }else{ pDirInfo = (PXIDISK_DIR_INFO)xixcore_GetDataBufferWithOffset(xbuf); pLotHeader = (PXIDISK_COMMON_LOT_HEADER)xixcore_GetDataBufferWithOffset(LotHeader); xixcore_InitializeCommonLotHeader( pLotHeader, pVCB->VolumeLotSignature, LOT_INFO_TYPE_DIRECTORY, LOT_FLAG_BEGIN, BeginingLotIndex, BeginingLotIndex, 0, 0, 0, sizeof(XIDISK_FILE_HEADER_LOT), pVCB->LotSize - sizeof(XIDISK_DIR_HEADER_LOT) ); pLotHeader->Lock.LockState= XIDISK_LOCK_RELEASED; pLotHeader->Lock.LockAcquireTime= 0;; memcpy(pLotHeader->Lock.LockHostSignature, pVCB->HostId , 16); // Changed by ILGU HONG // chesung suggest //RtlCopyMemory(pLotHeader->Lock.LockHostMacAddress, PtrVCB->HostMac, 6); memcpy(pLotHeader->Lock.LockHostMacAddress, pVCB->HostMac, 32); memset(pDirInfo, 0, (XIDISK_COMMON_LOT_HEADER_SIZE - XIXCORE_MD5DIGEST_AND_SEQSIZE)); pDirInfo->Access_time = xixcore_GetCurrentTime64(); pDirInfo->Change_time = xixcore_GetCurrentTime64(); pDirInfo->Create_time = xixcore_GetCurrentTime64(); pDirInfo->Modified_time = xixcore_GetCurrentTime64(); memcpy(pDirInfo->OwnHostId ,pVCB->HostId, 16); pDirInfo->ParentDirLotIndex = pDir->LotNumber; pDirInfo->LotIndex = BeginingLotIndex; pDirInfo->State = XIFS_FD_STATE_CREATE; pDirInfo->ACLState = 0; pDirInfo->FileAttribute = (FileAttribute | FILE_ATTRIBUTE_DIRECTORY); pDirInfo->AccessFlags = FILE_SHARE_READ; pDirInfo->FileSize = 0; pDirInfo->AllocationSize = pVCB->LotSize - XIDISK_DIR_HEADER_SIZE; pDirInfo->LinkCount = 1; XIXCORE_SET_FLAGS(pDirInfo->Type, XIFS_FD_TYPE_DIRECTORY); pDirInfo->NameSize = NameLength; memcpy(pDirInfo->Name, Name, NameLength); pDirInfo->AddressMapIndex = 0; } RC = xixcore_RawWriteFileHeader( pVCB->XixcoreBlockDevice, pVCB->LotSize, pVCB->SectorSize, pVCB->SectorSizeBit, BeginingLotIndex, xbuf, &Reason ); if(RC < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR(0x%x) Reason(0x%x) xixcore_CreateNewFile : xixcore_RawWriteFileHeader.\n", RC, Reason)); goto error_out; } RC = xixcore_RawWriteLotHeader( pVCB->XixcoreBlockDevice, pVCB->LotSize, pVCB->SectorSize, pVCB->SectorSizeBit, BeginingLotIndex, LotHeader, &Reason ); if(RC < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR(0x%x) Reason(0x%x) xixcore_CreateNewFile : xixcore_RawWriteLotAndFileHeader.\n", RC, Reason)); goto error_out; } xixcore_ZeroBufferOffset(xbuf); memset(xixcore_GetDataBuffer(xbuf), 0, XIDISK_DUP_FILE_INFO_SIZE); pAddressMap = (PXIDISK_ADDR_MAP)xixcore_GetDataBufferWithOffset(xbuf); pAddressMap->LotNumber[0] = BeginingLotIndex; RC = xixcore_RawWriteAddressOfFile( pVCB->XixcoreBlockDevice, pVCB->LotSize, pVCB->SectorSize, pVCB->SectorSizeBit, BeginingLotIndex, 0, pDir->AddrLotSize, &AddrStartSectorIndex, 0, xbuf, &Reason); if(RC < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR(0x%x) Reason(0x%x) xixcore_CreateNewFile : xixcore_RawWriteAddressOfFile.\n", RC, Reason)); goto error_out; } if(ChildType == XIFS_FD_TYPE_DIRECTORY) { PXIDISK_HASH_VALUE_TABLE pTable = NULL; xixcore_ZeroBufferOffset(xbuf); memset(xixcore_GetDataBuffer(xbuf), 0, XIDISK_DUP_FILE_INFO_SIZE); RC = xixcore_RawReadDirEntryHashValueTable( pVCB->XixcoreBlockDevice, pVCB->LotSize, pVCB->SectorSize, pVCB->SectorSizeBit, BeginingLotIndex, xbuf, &Reason ); if(RC < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR(0x%x) Reason(0x%x) xixcore_CreateNewFile : xixcore_RawWriteDirEntryHashValueTable.\n", RC, Reason)); if(RC == XCCODE_CRCERROR){ xixcore_ZeroBufferOffset(xbuf); }else{ goto error_out; } } pTable = (PXIDISK_HASH_VALUE_TABLE)xixcore_GetDataBufferWithOffset(xbuf); memset(pTable, 0, (XIDISK_HASH_VALUE_TABLE_SIZE - XIXCORE_MD5DIGEST_AND_SEQSIZE)); RC = xixcore_RawWriteDirEntryHashValueTable( pVCB->XixcoreBlockDevice, pVCB->LotSize, pVCB->SectorSize, pVCB->SectorSizeBit, BeginingLotIndex, xbuf, &Reason ); if(RC < 0 ){ DebugTrace(DEBUG_LEVEL_ERROR, DEBUG_TARGET_ALL, ("ERROR(0x%x) Reason(0x%x) xixcore_CreateNewFile : xixcore_RawWriteDirEntryHashValueTable.\n", RC, Reason)); goto error_out; } } *NewFileId = BeginingLotIndex; //xixcore_NotifyChange(pVCB, XIXCORE_META_FLAGS_UPDATE); RC = XCCODE_SUCCESS; error_out: if( RC < 0 ) { if(IsDirSet == 1){ xixcore_DeleteChildFromDir( pVCB, pDir, ChildIndex, DirContext ); } if(bLotAlloc == 1) { xixcore_FreeVCBLot(pVCB, BeginingLotIndex); } } if(xbuf) { xixcore_FreeBuffer(xbuf); } if(LotHeader){ xixcore_FreeBuffer(LotHeader); } DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_DIRINFO|DEBUG_TARGET_FCB|DEBUG_TARGET_FILEINFO), ("Exit (0x%x) xixcore_CreateNewFile \n", RC)); return RC; }
NTSTATUS xixfs_SendRenameLinkBC( IN BOOLEAN Wait, IN uint32 SubCommand, IN uint8 * HostMac, IN uint64 LotNumber, IN uint8 * VolumeId, IN uint64 OldParentLotNumber, IN uint64 NewParentLotNumber ) { NTSTATUS RC = STATUS_UNSUCCESSFUL; PXIXFSDG_PKT pPacket = NULL; PXIXFS_FILE_CHANGE_BROADCAST pPacketData = NULL; XIFS_LOCK_CONTROL LockControl; uint8 DstAddress[6] ={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Enter XifsdSendRenameLinkBC \n")); ASSERT(Wait); // Changed by ILGU HONG // chesung suggest /* if(FALSE ==xixfs_AllocDGPkt(&pPacket, HostMac, DstAddress, XIXFS_TYPE_FILE_CHANGE)) { return FALSE; } */ if(FALSE ==xixfs_AllocDGPkt(&pPacket, HostMac, NULL, XIXFS_TYPE_FILE_CHANGE)) { return FALSE; } pPacketData = &(pPacket->RawDataDG.FileChangeReq); // Changed by ILGU HONG RtlCopyMemory(pPacketData->VolumeId, VolumeId, 16); pPacketData->LotNumber = HTONLL(LotNumber); pPacketData->PrevParentLotNumber = HTONLL(OldParentLotNumber); pPacketData->NewParentLotNumber = HTONLL(NewParentLotNumber); pPacketData->SubCommand =HTONL(SubCommand); pPacket->TimeOut.QuadPart = xixcore_GetCurrentTime64() + DEFAULT_REQUEST_MAX_TIMEOUT; ExAcquireFastMutexUnsafe(&XiGlobalData.XifsComCtx.SendPktListMutex); InsertTailList(&(XiGlobalData.XifsComCtx.SendPktList), &(pPacket->PktListEntry) ); ExReleaseFastMutexUnsafe(&XiGlobalData.XifsComCtx.SendPktListMutex); KeSetEvent(&(XiGlobalData.XifsComCtx.CliSendDataEvent),0, FALSE); DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Exit XifsdSendRenameLinkBC \n")); return STATUS_SUCCESS; }
NTSTATUS xixfs_SendFileChangeRC( IN BOOLEAN Wait, IN uint8 * HostMac, IN uint64 LotNumber, IN uint8 * VolumeId, IN uint64 FileLength, IN uint64 AllocationLength, IN uint64 UpdateStartOffset ) { NTSTATUS RC = STATUS_UNSUCCESSFUL; PXIXFSDG_PKT pPacket = NULL; PXIXFS_FILE_LENGTH_CHANGE_BROADCAST pPacketData = NULL; uint8 DstAddress[6] ={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Enter xixfs_SendFileChangeRC \n")); ASSERT(Wait); // Changed by ILGU HONG // chesung suggest /* if(FALSE ==xixfs_AllocDGPkt(&pPacket, HostMac, DstAddress, XIXFS_TYPE_FILE_LENGTH_CHANGE)) { return FALSE; } */ if(FALSE ==xixfs_AllocDGPkt(&pPacket, HostMac, DstAddress, XIXFS_TYPE_FILE_LENGTH_CHANGE)) { return FALSE; } pPacketData = &(pPacket->RawDataDG.FileLenChangeReq); // Changed by ILGU HONG RtlCopyMemory(pPacketData->VolumeId, VolumeId, 16); pPacketData->LotNumber = HTONLL(LotNumber); pPacketData->FileLength = HTONLL(FileLength); pPacketData->AllocationLength = HTONLL(AllocationLength); pPacketData->WriteStartOffset = HTONLL(UpdateStartOffset); pPacket->TimeOut.QuadPart = xixcore_GetCurrentTime64() + DEFAULT_REQUEST_MAX_TIMEOUT; ExAcquireFastMutexUnsafe(&XiGlobalData.XifsComCtx.SendPktListMutex); InsertTailList(&(XiGlobalData.XifsComCtx.SendPktList), &(pPacket->PktListEntry) ); ExReleaseFastMutexUnsafe(&XiGlobalData.XifsComCtx.SendPktListMutex); KeSetEvent(&(XiGlobalData.XifsComCtx.CliSendDataEvent),0, FALSE); DebugTrace(DEBUG_LEVEL_TRACE, (DEBUG_TARGET_RESOURCE| DEBUG_TARGET_FCB|DEBUG_TARGET_LOCK), ("Exit xixfs_SendFileChangeRC \n")); return STATUS_SUCCESS; }