From ca89af18d37afb4fe9cea6e4ff3e22386d0db5b0 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 23 Sep 2013 17:07:53 +0200 Subject: [PATCH 2/3] scsi: prefer UUID to VM name for the initiator name RH-Author: Paolo Bonzini Message-id: <1379956073-3496-1-git-send-email-pbonzini@redhat.com> Patchwork-id: 54488 O-Subject: [RHEL 7.0 qemu-kvm PATCH] scsi: prefer UUID to VM name for the initiator name Bugzilla: 1006468 RH-Acked-by: Stefan Hajnoczi RH-Acked-by: Laszlo Ersek RH-Acked-by: Amos Kong Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1006468 Brew build: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=6317378 The UUID is unique even across multiple hosts, thus it is better than a VM name even if it is less user-friendly. Signed-off-by: Paolo Bonzini (cherry picked from commit 5accc8408f2dac1e00d888e4fe75e6174ba2a940) --- block/iscsi.c | 23 ++++++++++++++++------- include/sysemu/sysemu.h | 2 ++ stubs/Makefile.objs | 1 + stubs/uuid.c | 12 ++++++++++++ 4 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 stubs/uuid.c Signed-off-by: Miroslav Rezanina --- block/iscsi.c | 23 ++++++++++++++++------- include/sysemu/sysemu.h | 2 ++ stubs/Makefile.objs | 1 + stubs/uuid.c | 12 ++++++++++++ 4 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 stubs/uuid.c diff --git a/block/iscsi.c b/block/iscsi.c index 1294fdf..4ab9edc 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -33,6 +33,8 @@ #include "trace.h" #include "block/scsi.h" #include "qemu/iov.h" +#include "sysemu/sysemu.h" +#include "qmp-commands.h" #include #include @@ -923,8 +925,9 @@ static char *parse_initiator_name(const char *target) { QemuOptsList *list; QemuOpts *opts; - const char *name = NULL; - const char *iscsi_name = qemu_get_vm_name(); + const char *name; + char *iscsi_name; + UuidInfo *uuid_info; list = qemu_find_opts("iscsi"); if (list) { @@ -934,16 +937,22 @@ static char *parse_initiator_name(const char *target) } if (opts) { name = qemu_opt_get(opts, "initiator-name"); + if (name) { + return g_strdup(name); + } } } - if (name) { - return g_strdup(name); + uuid_info = qmp_query_uuid(NULL); + if (strcmp(uuid_info->UUID, UUID_NONE) == 0) { + name = qemu_get_vm_name(); } else { - return g_strdup_printf("iqn.2008-11.org.linux-kvm%s%s", - iscsi_name ? ":" : "", - iscsi_name ? iscsi_name : ""); + name = uuid_info->UUID; } + iscsi_name = g_strdup_printf("iqn.2008-11.org.linux-kvm%s%s", + name ? ":" : "", name ? name : ""); + qapi_free_UuidInfo(uuid_info); + return iscsi_name; } #if defined(LIBISCSI_FEATURE_NOP_COUNTER) diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index d7a77b6..76c5b64 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -17,7 +17,9 @@ extern const char *bios_name; extern const char *qemu_name; extern uint8_t qemu_uuid[]; int qemu_uuid_parse(const char *str, uint8_t *uuid); + #define UUID_FMT "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx" +#define UUID_NONE "00000000-0000-0000-0000-000000000000" bool runstate_check(RunState state); void runstate_set(RunState new_state); diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index 9b701b4..4b2cb7d 100644 --- a/stubs/Makefile.objs +++ b/stubs/Makefile.objs @@ -21,6 +21,7 @@ stub-obj-y += reset.o stub-obj-y += set-fd-handler.o stub-obj-y += slirp.o stub-obj-y += sysbus.o +stub-obj-y += uuid.o stub-obj-y += vm-stop.o stub-obj-y += vmstate.o stub-obj-$(CONFIG_WIN32) += fd-register.o diff --git a/stubs/uuid.c b/stubs/uuid.c new file mode 100644 index 0000000..ffc0ed4 --- /dev/null +++ b/stubs/uuid.c @@ -0,0 +1,12 @@ +#include "qemu-common.h" +#include "sysemu/sysemu.h" +#include "qmp-commands.h" + +UuidInfo *qmp_query_uuid(Error **errp) +{ + UuidInfo *info = g_malloc0(sizeof(*info)); + + info->UUID = g_strdup(UUID_NONE); + return info; +} + -- 1.7.1