From: VMware, Inc <> Date: Wed, 18 Sep 2013 03:16:49 +0000 (-0700) Subject: HGFS: Clean up server packet abstraction part V X-Git-Tag: 2013.09.16-1328054~104 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=039bc01a6547c7306ac9c62c8f62ecd055443e9d;p=thirdparty%2Fopen-vm-tools.git HGFS: Clean up server packet abstraction part V Clean up the packet utility routines to only pass the arguments that are required. This means we only need to use the HGFS server channel callbacks and not the whole HGFS server transport session object. Signed-off-by: Dmitry Torokhov --- diff --git a/open-vm-tools/lib/hgfsServer/hgfsServer.c b/open-vm-tools/lib/hgfsServer/hgfsServer.c index 05aff1d43..1835bb818 100644 --- a/open-vm-tools/lib/hgfsServer/hgfsServer.c +++ b/open-vm-tools/lib/hgfsServer/hgfsServer.c @@ -2973,7 +2973,7 @@ HgfsServerGetRequest(HgfsPacket *packet, // IN: packet size_t requestOpArgsSize; HgfsInternalStatus parseStatus = HGFS_ERROR_SUCCESS; - request = HSPU_GetMetaPacket(packet, &requestSize, transportSession); + request = HSPU_GetMetaPacket(packet, &requestSize, transportSession->channelCbTable); ASSERT_DEVEL(request); if (NULL == request) { @@ -3091,7 +3091,7 @@ HgfsServerCompleteRequest(HgfsInternalStatus status, // IN: Status of the requ replyTotalSize = replySize; reply = HSPU_GetReplyPacket(input->packet, &replyTotalSize, - input->transportSession); + input->transportSession->channelCbTable); ASSERT_DEVEL(reply && (replySize <= replyTotalSize)); if (!HgfsPackReplyHeader(status, replyPayloadSize, input->sessionEnabled, replySessionId, @@ -3135,7 +3135,7 @@ HgfsServerProcessRequest(void *context) if (!input->request) { input->request = HSPU_GetMetaPacket(input->packet, &input->requestSize, - input->transportSession); + input->transportSession->channelCbTable); } input->payload = (char *)input->request + input->payloadOffset; @@ -3218,7 +3218,7 @@ HgfsServerSessionReceive(HgfsPacket *packet, // IN: Hgfs Packet * Asynchronous processing is supported by the transport. * We can release mappings here and reacquire when needed. */ - HSPU_PutMetaPacket(packet, transportSession); + HSPU_PutMetaPacket(packet, transportSession->channelCbTable); input->request = NULL; Atomic_Inc(&gHgfsAsyncCounter); @@ -4418,9 +4418,9 @@ HgfsServerSessionSendComplete(HgfsPacket *packet, // IN/OUT: Hgfs packet HgfsTransportSessionInfo *transportSession = clientData; if (packet->guestInitiated) { - HSPU_PutMetaPacket(packet, transportSession); - HSPU_PutReplyPacket(packet, transportSession); - HSPU_PutDataPacketBuf(packet, transportSession); + HSPU_PutMetaPacket(packet, transportSession->channelCbTable); + HSPU_PutReplyPacket(packet, transportSession->channelCbTable); + HSPU_PutDataPacketBuf(packet, transportSession->channelCbTable); } else { free(packet->metaPacket); free(packet); @@ -5752,7 +5752,9 @@ HgfsAllocInitReply(HgfsPacket *packet, // IN/OUT: Hgfs Packet headerSize = sizeof(HgfsReply); } replyPacketSize = headerSize + replyDataSize; - replyHeader = HSPU_GetReplyPacket(packet, &replyPacketSize, session->transportSession); + replyHeader = HSPU_GetReplyPacket(packet, + &replyPacketSize, + session->transportSession->channelCbTable); ASSERT_DEVEL(replyHeader && (replyPacketSize >= headerSize + replyDataSize)); @@ -5815,7 +5817,7 @@ HgfsServerRead(HgfsInputParam *input) // IN: Input params payload = &reply->payload[0]; } else { payload = HSPU_GetDataPacketBuf(input->packet, BUF_WRITEABLE, - input->transportSession); + input->transportSession->channelCbTable); } if (payload) { status = HgfsPlatformReadFile(file, input->session, offset, @@ -5900,7 +5902,7 @@ HgfsServerWrite(HgfsInputParam *input) // IN: Input params if (NULL == dataToWrite) { /* No inline data to write, get it from the transport shared memory. */ dataToWrite = HSPU_GetDataPacketBuf(input->packet, BUF_READABLE, - input->transportSession); + input->transportSession->channelCbTable); if (NULL == dataToWrite) { LOG(4, ("%s: Error: Op %d mapping write data buffer\n", __FUNCTION__, input->op)); status = HGFS_ERROR_PROTOCOL; @@ -7982,7 +7984,7 @@ HgfsServerSearchRead(HgfsInputParam *input) // IN: Input params if (inlineDataSize == 0) { info.replyPayload = HSPU_GetDataPacketBuf(input->packet, BUF_WRITEABLE, - input->transportSession); + input->transportSession->channelCbTable); } else { info.replyPayload = (char *)info.reply + baseReplySize; } diff --git a/open-vm-tools/lib/hgfsServer/hgfsServerInt.h b/open-vm-tools/lib/hgfsServer/hgfsServerInt.h index 39513a395..c66f0c8ef 100644 --- a/open-vm-tools/lib/hgfsServer/hgfsServerInt.h +++ b/open-vm-tools/lib/hgfsServer/hgfsServerInt.h @@ -874,29 +874,29 @@ HgfsPlatformValidateOpen(HgfsFileOpenInfo *openInfo, // IN: Open info struct fileDesc *newHandle); // OUT: Handle to the file void * -HSPU_GetMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet - size_t *metaPacketSize, // OUT: Size of metaPacket - HgfsTransportSessionInfo *transportSession); // IN: Session Info +HSPU_GetMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet + size_t *metaPacketSize, // OUT: Size of metaPacket + HgfsServerChannelCallbacks *chanCb); // IN: Channel callbacks void * -HSPU_GetDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet - MappingType mappingType, // IN: Readable/ Writeable ? - HgfsTransportSessionInfo *transportSession); // IN: Session Info +HSPU_GetDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet + MappingType mappingType, // IN: Readable/ Writeable ? + HgfsServerChannelCallbacks *chanCb); // IN: Channel callbacks void -HSPU_PutDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet - HgfsTransportSessionInfo *transportSession); // IN: Session Info +HSPU_PutDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet + HgfsServerChannelCallbacks *chanCb); // IN: Channel callbacks void -HSPU_PutMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet - HgfsTransportSessionInfo *transportSession); // IN: Session Info +HSPU_PutMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet + HgfsServerChannelCallbacks *chanCb); // IN: Channel callbacks void * -HSPU_GetReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet - size_t *replyPacketSize, //IN/OUT: Size of reply Packet - HgfsTransportSessionInfo *transportSession); // IN: Session Info +HSPU_GetReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet + size_t *replyPacketSize, //IN/OUT: Size of reply Packet + HgfsServerChannelCallbacks *chanCb); // IN: Channel callbacks void -HSPU_PutReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet - HgfsTransportSessionInfo *transportSession); // IN: Session Info +HSPU_PutReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet + HgfsServerChannelCallbacks *chanCb); // IN: Channel callbacks #endif /* __HGFS_SERVER_INT_H__ */ diff --git a/open-vm-tools/lib/hgfsServer/hgfsServerPacketUtil.c b/open-vm-tools/lib/hgfsServer/hgfsServerPacketUtil.c index cf5e076a4..3d099d83d 100644 --- a/open-vm-tools/lib/hgfsServer/hgfsServerPacketUtil.c +++ b/open-vm-tools/lib/hgfsServer/hgfsServerPacketUtil.c @@ -39,19 +39,19 @@ static void *HSPUGetBuf(HgfsPacket *packet, size_t bufSize, Bool *isAllocated, MappingType mappingType, - HgfsTransportSessionInfo *transportSession); + HgfsServerChannelCallbacks *chanCb); static void HSPUPutBuf(HgfsPacket *packet, uint32 startIndex, void **buf, size_t *bufSize, Bool *isAllocated, MappingType mappingType, - HgfsTransportSessionInfo *transportSession); + HgfsServerChannelCallbacks *chanCb); static void HSPUCopyBufToIovec(HgfsPacket *packet, uint32 startIndex, void *buf, size_t bufSize, - HgfsTransportSessionInfo *transportSession); + HgfsServerChannelCallbacks *chanCb); @@ -72,11 +72,10 @@ static void HSPUCopyBufToIovec(HgfsPacket *packet, */ void * -HSPU_GetReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet - size_t *replyPacketSize, // IN/OUT: Size of reply Packet - HgfsTransportSessionInfo *transportSession) // IN: Session Info +HSPU_GetReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet + size_t *replyPacketSize, // IN/OUT: Size of reply Packet + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { - ASSERT(transportSession); if (packet->replyPacket) { /* * When we are transferring packets over backdoor, reply packet @@ -85,7 +84,7 @@ HSPU_GetReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet LOG(4, ("Existing reply packet %s %"FMTSZ"u %"FMTSZ"u\n", __FUNCTION__, *replyPacketSize, packet->replyPacketSize)); ASSERT_DEVEL(*replyPacketSize <= packet->replyPacketSize); - } else if (transportSession->channelCbTable && transportSession->channelCbTable->getWriteVa) { + } else if (chanCb && chanCb->getWriteVa) { /* Can we write directly into guest memory? */ ASSERT_DEVEL(packet->metaPacket); if (packet->metaPacket) { @@ -126,8 +125,8 @@ HSPU_GetReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet */ void -HSPU_PutReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet - HgfsTransportSessionInfo *transportSession) // IN: Session Info +HSPU_PutReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { /* * If there wasn't an allocated buffer for the reply, there is nothing to @@ -161,15 +160,15 @@ HSPU_PutReplyPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet */ void * -HSPU_GetMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet - size_t *metaPacketSize, // OUT: Size of metaPacket - HgfsTransportSessionInfo *transportSession) // IN: Session Info +HSPU_GetMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet + size_t *metaPacketSize, // OUT: Size of metaPacket + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { *metaPacketSize = packet->metaPacketSize; return HSPUGetBuf(packet, 0, &packet->metaPacket, packet->metaPacketSize, &packet->metaPacketIsAllocated, - BUF_READWRITEABLE, transportSession); + BUF_READWRITEABLE, chanCb); } @@ -190,14 +189,15 @@ HSPU_GetMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet */ void * -HSPU_GetDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet - MappingType mappingType, // IN: Writeable/Readable - HgfsTransportSessionInfo *transportSession) // IN: Session Info +HSPU_GetDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet + MappingType mappingType, // IN: Writeable/Readable + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { packet->dataMappingType = mappingType; return HSPUGetBuf(packet, packet->dataPacketIovIndex, &packet->dataPacket, packet->dataPacketSize, - &packet->dataPacketIsAllocated, mappingType, transportSession); + &packet->dataPacketIsAllocated, mappingType, + chanCb); } @@ -218,13 +218,13 @@ HSPU_GetDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet */ static void * -HSPUGetBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet - uint32 startIndex, // IN: start index of iov - void **buf, // OUT: Contigous buffer - size_t bufSize, // IN: Size of buffer - Bool *isAllocated, // OUT: Was buffer allocated ? - MappingType mappingType, // IN: Readable/Writeable ? - HgfsTransportSessionInfo *transportSession) // IN: Session Info +HSPUGetBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet + uint32 startIndex, // IN: start index of iov + void **buf, // OUT: Contigous buffer + size_t bufSize, // IN: Size of buffer + Bool *isAllocated, // OUT: Was buffer allocated ? + MappingType mappingType, // IN: Readable/Writeable ? + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { uint32 iovCount; uint32 iovMapped = 0; @@ -240,16 +240,16 @@ HSPUGetBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet return NULL; } - if (!transportSession->channelCbTable) { + if (chanCb == NULL) { return NULL; } if (mappingType == BUF_WRITEABLE || mappingType == BUF_READWRITEABLE) { - getVa = transportSession->channelCbTable->getWriteVa; + getVa = chanCb->getWriteVa; } else { ASSERT(mappingType == BUF_READABLE); - getVa = transportSession->channelCbTable->getReadVa; + getVa = chanCb->getReadVa; } /* Looks like we are in the middle of poweroff. */ @@ -318,7 +318,7 @@ HSPUGetBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet freeMem: for (i = startIndex; i < iovCount; i++) { - transportSession->channelCbTable->putVa(&packet->iov[i].context); + chanCb->putVa(&packet->iov[i].context); packet->iov[i].va = NULL; } @@ -343,14 +343,14 @@ freeMem: */ void -HSPU_PutMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet - HgfsTransportSessionInfo *transportSession) // IN: Session Info +HSPU_PutMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { LOG(4, ("%s Hgfs Putting Meta packet\n", __FUNCTION__)); HSPUPutBuf(packet, 0, &packet->metaPacket, &packet->metaPacketSize, &packet->metaPacketIsAllocated, - BUF_WRITEABLE, transportSession); + BUF_WRITEABLE, chanCb); } @@ -371,15 +371,15 @@ HSPU_PutMetaPacket(HgfsPacket *packet, // IN/OUT: Hgfs Packet */ void -HSPU_PutDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet - HgfsTransportSessionInfo *transportSession) // IN: Session Info +HSPU_PutDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { LOG(4, ("%s Hgfs Putting Data packet\n", __FUNCTION__)); HSPUPutBuf(packet, packet->dataPacketIovIndex, &packet->dataPacket, &packet->dataPacketSize, &packet->dataPacketIsAllocated, - packet->dataMappingType, transportSession); + packet->dataMappingType, chanCb); } @@ -399,29 +399,29 @@ HSPU_PutDataPacketBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet */ void -HSPUPutBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet - uint32 startIndex, // IN: Start of iov - void **buf, // IN/OUT: Buffer to be freed - size_t *bufSize, // IN: Size of the buffer - Bool *isAllocated, // IN: Was buffer allocated ? - MappingType mappingType, // IN: Readable / Writeable ? - HgfsTransportSessionInfo *transportSession) // IN: Session info +HSPUPutBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet + uint32 startIndex, // IN: Start of iov + void **buf, // IN/OUT: Buffer to be freed + size_t *bufSize, // IN: Size of the buffer + Bool *isAllocated, // IN: Was buffer allocated ? + MappingType mappingType, // IN: Readable / Writeable ? + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { uint32 iovCount = 0; int size = *bufSize; ASSERT(buf); - if (!transportSession->channelCbTable) { + if (chanCb == NULL) { return; } - if (!transportSession->channelCbTable->putVa || *buf == NULL) { + if (chanCb->putVa == NULL || *buf == NULL) { return; } if (*isAllocated) { if (mappingType == BUF_WRITEABLE) { - HSPUCopyBufToIovec(packet, startIndex, *buf, *bufSize, transportSession); + HSPUCopyBufToIovec(packet, startIndex, *buf, *bufSize, chanCb); } LOG(10, ("%s: Hgfs Freeing buffer \n", __FUNCTION__)); free(*buf); @@ -431,7 +431,7 @@ HSPUPutBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet iovCount < packet->iovCount && size > 0; iovCount++) { ASSERT_DEVEL(packet->iov[iovCount].context); - transportSession->channelCbTable->putVa(&packet->iov[iovCount].context); + chanCb->putVa(&packet->iov[iovCount].context); size -= packet->iov[iovCount].len; } LOG(10, ("%s: Hgfs bufSize = %d \n", __FUNCTION__, size)); @@ -457,11 +457,11 @@ HSPUPutBuf(HgfsPacket *packet, // IN/OUT: Hgfs Packet */ static void -HSPUCopyBufToIovec(HgfsPacket *packet, // IN/OUT: Hgfs Packet - uint32 startIndex, // IN: start index into iov - void *buf, // IN: Contigous Buffer - size_t bufSize, // IN: Size of buffer - HgfsTransportSessionInfo *transportSession) // IN: Session Info +HSPUCopyBufToIovec(HgfsPacket *packet, // IN/OUT: Hgfs Packet + uint32 startIndex, // IN: start index into iov + void *buf, // IN: Contigous Buffer + size_t bufSize, // IN: Size of buffer + HgfsServerChannelCallbacks *chanCb) // IN: Channel callbacks { uint32 iovCount; size_t remainingSize = bufSize; @@ -471,12 +471,12 @@ HSPUCopyBufToIovec(HgfsPacket *packet, // IN/OUT: Hgfs Packet ASSERT(packet); ASSERT(buf); - if (!transportSession->channelCbTable) { + if (chanCb == NULL) { return; } - ASSERT_DEVEL(transportSession->channelCbTable->getWriteVa); - if (!transportSession->channelCbTable->getWriteVa) { + ASSERT_DEVEL(chanCb->getWriteVa != NULL); + if (chanCb->getWriteVa == NULL) { return; } @@ -491,14 +491,13 @@ HSPUCopyBufToIovec(HgfsPacket *packet, // IN/OUT: Hgfs Packet ASSERT_DEVEL(packet->iov[iovCount].len <= (PAGE_SIZE - PAGE_OFFSET(packet->iov[iovCount].pa))); - packet->iov[iovCount].va = - transportSession->channelCbTable->getWriteVa(packet->iov[iovCount].pa, - packet->iov[iovCount].len, - &packet->iov[iovCount].context); + packet->iov[iovCount].va = chanCb->getWriteVa(packet->iov[iovCount].pa, + packet->iov[iovCount].len, + &packet->iov[iovCount].context); ASSERT_DEVEL(packet->iov[iovCount].va); if (packet->iov[iovCount].va != NULL) { memcpy(packet->iov[iovCount].va, (char *)buf + copiedAmount, copyAmount); - transportSession->channelCbTable->putVa(&packet->iov[iovCount].context); + chanCb->putVa(&packet->iov[iovCount].context); remainingSize -= copyAmount; copiedAmount += copyAmount; } else {