[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/6] iscsi: add iscsi_create support
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 1/6] iscsi: add iscsi_create support |
Date: |
Tue, 22 Jan 2013 15:19:51 +0100 |
From: Peter Lieven <address@hidden>
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 <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
block/iscsi.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/block/iscsi.c b/block/iscsi.c
index 041ee07..d8382fd 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -957,6 +957,56 @@ static int iscsi_has_zero_init(BlockDriverState *bs)
return 0;
}
+static int iscsi_create(const char *filename, QEMUOptionParameter *options)
+{
+ 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;
+
+ ret = iscsi_open(&bs, filename, 0);
+ if (ret != 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",
@@ -964,6 +1014,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,
--
1.8.1
- [Qemu-devel] [PULL 1.4 0/6] Pending SCSI patches for 1.4, Paolo Bonzini, 2013/01/22
- [Qemu-devel] [PATCH 1/6] iscsi: add iscsi_create support,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 2/6] iscsi: partly avoid iovec linearization in iscsi_aio_writev, Paolo Bonzini, 2013/01/22
- [Qemu-devel] [PATCH 4/6] scsi: fix segfault with 0-byte disk, Paolo Bonzini, 2013/01/22
- [Qemu-devel] [PATCH 5/6] lsi: use qbus_reset_all to reset SCSI bus, Paolo Bonzini, 2013/01/22
- [Qemu-devel] [PATCH 3/6] iscsi: add support for iSCSI NOPs [v2], Paolo Bonzini, 2013/01/22
- [Qemu-devel] [PATCH 6/6] scsi: Drop useless null test in scsi_unit_attention(), Paolo Bonzini, 2013/01/22