Пример #1
0
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;
}
Пример #2
0
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;
	}
}
Пример #3
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;
}
Пример #4
0
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;	
}
Пример #5
0
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;	
}