From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:45629) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TaMgT-0007d2-6f for qemu-devel@nongnu.org; Mon, 19 Nov 2012 03:26:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TaMgQ-00070q-4F for qemu-devel@nongnu.org; Mon, 19 Nov 2012 03:26:25 -0500 Received: from mx1.redhat.com ([209.132.183.28]:32752) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TaMgP-00070j-RA for qemu-devel@nongnu.org; Mon, 19 Nov 2012 03:26:22 -0500 Message-ID: <50A9ED26.4040505@redhat.com> Date: Mon, 19 Nov 2012 09:26:14 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <50A7A994.3020705@dlhnet.de> In-Reply-To: <50A7A994.3020705@dlhnet.de> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] iscsi: add iscsi_create support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Lieven Cc: Kevin Wolf , aderumier@odiso.com, "qemu-devel@nongnu.org" , ronnie sahlberg Il 17/11/2012 16:13, Peter Lieven ha scritto: > This patch adds support for bdrv_create. This allows e.g. > to use qemu-img to convert from any supported device to > an iscsi backed storage as destination. > > Signed-off-by: Peter Lieven > > diff --git a/block/iscsi.c b/block/iscsi.c > index 4bc3d4b..eb586cb 100644 > --- a/block/iscsi.c > +++ b/block/iscsi.c > @@ -952,6 +952,54 @@ static void iscsi_close(BlockDriverState *bs) > memset(iscsilun, 0, sizeof(IscsiLun)); > } > > +static int iscsi_create(const char *filename, QEMUOptionParameter *options) { Incorrect brace positioning, fixed it myself. + int ret = 0; > + int64_t total_size = 0; > + BlockDriverState bs; > + IscsiLun *iscsilun = NULL; > + > + memset(&bs, 0, sizeof(BlockDriverState)); > + > + /* Read out options */ > + while (options && options->name) { > + if (!strcmp(options->name, "size")) { > + total_size = options->value.n / BDRV_SECTOR_SIZE; > + } > + options++; > + } > + > + bs.opaque = g_malloc0(sizeof(struct IscsiLun)); > + iscsilun = bs.opaque; > + > + if ((ret = iscsi_open(&bs, filename, 0)) != 0) { > + goto out; > + } > + if (iscsilun->type != TYPE_DISK) { > + ret = -ENODEV; > + goto out; > + } > + if (bs.total_sectors < total_size) { > + ret = -ENOSPC; > + } > + > + ret = 0; > +out: > + if (iscsilun->iscsi != NULL) { > + iscsi_destroy_context(iscsilun->iscsi); > + } > + g_free(bs.opaque); > + return ret; > +} > + > +static QEMUOptionParameter iscsi_create_options[] = { > + { > + .name = BLOCK_OPT_SIZE, > + .type = OPT_SIZE, > + .help = "Virtual disk size" > + }, > + { NULL } > +}; > + > static BlockDriver bdrv_iscsi = { > .format_name = "iscsi", > .protocol_name = "iscsi", > @@ -959,6 +1007,8 @@ static BlockDriver bdrv_iscsi = { > .instance_size = sizeof(IscsiLun), > .bdrv_file_open = iscsi_open, > .bdrv_close = iscsi_close, > + .bdrv_create = iscsi_create, > + .create_options = iscsi_create_options, > > .bdrv_getlength = iscsi_getlength, > > Applied to scsi-next branch. Paolo