From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52262) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vno1T-0002Up-Os for qemu-devel@nongnu.org; Tue, 03 Dec 2013 06:20:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vno1K-00062W-Mv for qemu-devel@nongnu.org; Tue, 03 Dec 2013 06:20:11 -0500 Received: from e23smtp04.au.ibm.com ([202.81.31.146]:40753) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vno1K-0005xW-0T for qemu-devel@nongnu.org; Tue, 03 Dec 2013 06:20:02 -0500 Received: from /spool/local by e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 3 Dec 2013 21:19:56 +1000 Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [9.190.235.152]) by d23dlp01.au.ibm.com (Postfix) with ESMTP id 7A8832CE8051 for ; Tue, 3 Dec 2013 22:19:54 +1100 (EST) Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id rB3B1XMw23855338 for ; Tue, 3 Dec 2013 22:01:42 +1100 Received: from d23av01.au.ibm.com (localhost [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id rB3BJhIW029938 for ; Tue, 3 Dec 2013 22:19:44 +1100 Message-ID: <529DBE4C.8060205@linux.vnet.ibm.com> Date: Tue, 03 Dec 2013 19:19:40 +0800 From: Lei Li MIME-Version: 1.0 References: <1385975957-22941-1-git-send-email-lilei@linux.vnet.ibm.com> <1385975957-22941-7-git-send-email-lilei@linux.vnet.ibm.com> <20131202093341.GA1980@redhat.com> In-Reply-To: <20131202093341.GA1980@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 06/17] migration-local: add send_pipefd() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Daniel P. Berrange" Cc: aarcange@redhat.com, quintela@redhat.com, qemu-devel@nongnu.org, mrhines@linux.vnet.ibm.com, aliguori@amazon.com, lagarcia@br.ibm.com, pbonzini@redhat.com, rcj@linux.vnet.ibm.com On 12/02/2013 05:33 PM, Daniel P. Berrange wrote: > On Mon, Dec 02, 2013 at 05:19:06PM +0800, Lei Li wrote: >> This patch adds send_pipefd() to pass the pipe file descriptor >> to destination process. >> >> Signed-off-by: Lei Li >> --- >> migration-local.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 46 insertions(+), 0 deletions(-) >> >> diff --git a/migration-local.c b/migration-local.c >> index 929ed60..f479530 100644 >> --- a/migration-local.c >> +++ b/migration-local.c >> @@ -167,3 +167,49 @@ fail: >> g_free(s); >> return NULL; >> } >> + >> + >> +/* >> + * Pass a pipe file descriptor to another process. >> + * >> + * Return negative value If pipefd < 0. Return 0 on >> + * success. >> + * >> + */ >> +static int send_pipefd(int sockfd, int pipefd) >> +{ >> + struct msghdr msg; >> + struct iovec iov[1]; >> + ssize_t ret; >> + char req[1] = { 0x01 }; >> + >> + union { >> + struct cmsghdr cm; >> + char control[CMSG_SPACE(sizeof(int))]; >> + } control_un; >> + struct cmsghdr *cmptr; >> + >> + msg.msg_control = control_un.control; >> + msg.msg_controllen = sizeof(control_un.control); >> + >> + cmptr = CMSG_FIRSTHDR(&msg); >> + cmptr->cmsg_len = CMSG_LEN(sizeof(int)); >> + cmptr->cmsg_level = SOL_SOCKET; >> + cmptr->cmsg_type = SCM_RIGHTS; >> + *((int *) CMSG_DATA(cmptr)) = pipefd; >> + >> + msg.msg_name = NULL; >> + msg.msg_namelen = 0; >> + >> + iov[0].iov_base = req; >> + iov[0].iov_len = sizeof(req); >> + msg.msg_iov = iov; >> + msg.msg_iovlen = 1; >> + >> + ret = sendmsg(sockfd, &msg, 0); >> + if (ret <= 0) { >> + DPRINTF("sendmsg error: %s\n", strerror(errno)); >> + } >> + >> + return ret; >> +} > Just a reminder about my comments from previous posting. This is > introducing a 3rd private function for sending FDs. The existing > code should be refactored into qemu-socket.{c,h} and shared. Hi Daniel, Yes, I remembered your suggestion. As my reply in the previous version, I'll make this refactoring in a separate thread. There are some differences between these private functions (like data type and length of bytes transmitted), may need a little time to get the common method settle down, and would be better to do some test to make sure there is no impact on them. And now this is a complete series as an experimental version, do you mind if the refactoring would be posted after this series? > > Daniel -- Lei