From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42099) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X9G3G-0008LP-M8 for qemu-devel@nongnu.org; Mon, 21 Jul 2014 12:04:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X9G2J-0007zh-TD for qemu-devel@nongnu.org; Mon, 21 Jul 2014 12:02:58 -0400 Received: from mail-we0-x232.google.com ([2a00:1450:400c:c03::232]:58859) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X9G2J-0007wY-G1 for qemu-devel@nongnu.org; Mon, 21 Jul 2014 12:01:59 -0400 Received: by mail-we0-f178.google.com with SMTP id w61so7842712wes.9 for ; Mon, 21 Jul 2014 09:01:56 -0700 (PDT) Date: Mon, 21 Jul 2014 17:01:51 +0100 From: Stefan Hajnoczi Message-ID: <20140721160151.GB26753@stefanha-thinkpad.redhat.com> References: <1403857452-23768-1-git-send-email-cnanakos@grnet.gr> <1403857452-23768-4-git-send-email-cnanakos@grnet.gr> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="rS8CxjVDS/+yyDmU" Content-Disposition: inline In-Reply-To: <1403857452-23768-4-git-send-email-cnanakos@grnet.gr> Subject: Re: [Qemu-devel] [PATCH v6 3/5] block/archipelago: Add support for creating images List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Chrysostomos Nanakos Cc: kwolf@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com --rS8CxjVDS/+yyDmU Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Jun 27, 2014 at 11:24:10AM +0300, Chrysostomos Nanakos wrote: > +static int qemu_archipelago_create_volume(Error **errp, const char *volname, > + char *segment_name, > + uint64_t size, xport mportno, > + xport vportno) > +{ > + int ret, targetlen; > + struct xseg *xseg = NULL; > + struct xseg_request *req; > + struct xseg_request_clone *xclone; > + struct xseg_port *port; > + xport srcport = NoPort, sport = NoPort; > + char *target; > + > + /* Try default values if none has been set */ > + if (mportno == (xport) -1) { > + mportno = 1001; > + } > + > + if (vportno == (xport) -1) { > + vportno = 501; > + } > + > + if (segment_name == NULL) { > + segment_name = g_strdup("archipelago"); > + } > + > + if (xseg_initialize()) { > + error_setg(errp, "Cannot initialize XSEG"); > + return -1; Leaks segment_name (if internally allocated) > + } > + > + xseg = xseg_join((char *)"posix", segment_name, > + (char *)"posixfd", NULL); > + > + if (!xseg) { > + error_setg(errp, "Cannot join XSEG shared memory segment"); > + return -1; Leaks segment_name (if internally allocated) > + } > + > + port = xseg_bind_dynport(xseg); > + srcport = port->portno; > + init_local_signal(xseg, sport, srcport); > + > + req = xseg_get_request(xseg, srcport, mportno, X_ALLOC); > + if (!req) { > + error_setg(errp, "Cannot get XSEG request"); > + return -1; Leaks segment_name (if internally allocated) > + } > + > + targetlen = strlen(volname); > + ret = xseg_prep_request(xseg, req, targetlen, > + sizeof(struct xseg_request_clone)); > + if (ret < 0) { > + error_setg(errp, "Cannot prepare XSEG request"); > + goto err_exit; > + } > + > + target = xseg_get_target(xseg, req); > + if (!target) { > + error_setg(errp, "Cannot get XSEG target.\n"); > + goto err_exit; > + } > + memcpy(target, volname, targetlen); > + xclone = (struct xseg_request_clone *) xseg_get_data(xseg, req); > + memset(xclone->target, 0 , XSEG_MAX_TARGETLEN); > + xclone->targetlen = 0; > + xclone->size = size; > + req->offset = 0; > + req->size = req->datalen; > + req->op = X_CLONE; > + > + xport p = xseg_submit(xseg, req, srcport, X_ALLOC); > + if (p == NoPort) { > + error_setg(errp, "Could not submit XSEG request"); > + goto err_exit; > + } > + xseg_signal(xseg, p); > + > + ret = wait_reply(xseg, srcport, port, req); > + if (ret < 0) { > + error_setg(errp, "wait_reply() error."); > + } > + > + xseg_put_request(xseg, req, srcport); > + xseg_quit_local_signal(xseg, srcport); > + xseg_leave_dynport(xseg, port); > + xseg_leave(xseg); > + return ret; > + > +err_exit: > + xseg_put_request(xseg, req, srcport); > + xseg_quit_local_signal(xseg, srcport); > + xseg_leave_dynport(xseg, port); > + xseg_leave(xseg); > + return -1; Leaks segment_name (if internally allocated) > + /* Create an Archipelago volume */ > + ret = qemu_archipelago_create_volume(errp, volname, segment_name, > + total_size, mport, > + vport); > + > + if (volname) { > + g_free(volname); > + } > + if (segment_name) { > + g_free(segment_name); > + } g_free(NULL) is a nop. The if statement isn't needed to check NULL pointers. --rS8CxjVDS/+yyDmU Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJTzTlvAAoJEJykq7OBq3PIrV0H/jNsxMR2QqfgN+Xb8gmgRpcR C5uwtB9YiYbRVcltBejLs7eRo805rFBg7sRS0hg5RirlI5npEIZqwoZD/HVHW2As LNTNdQjXXWwpta9bpJwvjxldkPBFaZM8si30jfWr9FZ2eTrDOhJ3q+vG0YhpSrlC 6A8z76G77UMb9lfke8HqlXiCVh/ESpu5nZN7TwVzv9XDl/Hk6OzxOUi4vpHx8rDS BCEEACQvu4ItSwYzNhpAq/X6t3RSZqnstY4lduT4t35B0/lsrAqIJnOKyFFWDscS 4pPwj/rEB/AS6bTYcDqHEbhwcN2bpRi8JpqHovb15dygtauY7dadh1PuuK3VmhA= =gyYR -----END PGP SIGNATURE----- --rS8CxjVDS/+yyDmU--