From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34117) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a2KUT-0007kz-Jx for qemu-devel@nongnu.org; Fri, 27 Nov 2015 09:59:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a2KUQ-0001rp-2x for qemu-devel@nongnu.org; Fri, 27 Nov 2015 09:59:13 -0500 Received: from mx2.suse.de ([195.135.220.15]:49018) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a2KUP-0001rZ-St for qemu-devel@nongnu.org; Fri, 27 Nov 2015 09:59:10 -0500 From: Hannes Reinecke Date: Fri, 27 Nov 2015 15:59:05 +0100 Message-Id: <1448636346-24641-8-git-send-email-hare@suse.de> In-Reply-To: <1448636346-24641-1-git-send-email-hare@suse.de> References: <1448636346-24641-1-git-send-email-hare@suse.de> Subject: [Qemu-devel] [PATCH 7/8] scsi-disk: Implement 'alua_preferred' option List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: Johannes Thumshirn , Stefan Hajnoczi , Hannes Reinecke , qemu-devel@nongnu.org, Alexander Graf Implement an option to set the 'preferred path' bit in the REPORT TARGET PORT GROUPS output. Signed-off-by: Hannes Reinecke --- hw/scsi/scsi-disk.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index b3ab890..07e0c28 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -3411,6 +3411,38 @@ out: } } +static void scsi_disk_get_alua_pref(Object *obj, Visitor *v, void *opaque, + const char *name, Error **errp) +{ + SCSIDiskState *s = OBJECT_CHECK(SCSIDiskState, obj, "scsi-disk"); + bool pref = !!(s->alua_state & 0x80); + + visit_type_bool(v, &pref, name, errp); +} + +static void scsi_disk_set_alua_pref(Object *obj, Visitor *v, void *opaque, + const char *name, Error **errp) +{ + SCSIDiskState *s = OBJECT_CHECK(SCSIDiskState, obj, "scsi-disk"); + bool pref; + Error *local_err = NULL; + + visit_type_bool(v, &pref, name, &local_err); + if (local_err) { + goto out; + } + + if (pref) { + s->alua_state |= 0x80; + } else { + s->alua_state &= ~0x80; + } +out: + if (local_err) { + error_propagate(errp, local_err); + } +} + static void scsi_disk_instance_initfn(Object *obj) { object_property_add(obj, "alua_state", "uint8", @@ -3421,6 +3453,11 @@ static void scsi_disk_instance_initfn(Object *obj) scsi_disk_get_alua_policy, scsi_disk_set_alua_policy, NULL, NULL, NULL); object_property_set_str(obj, "", "alua_policy", NULL); + + object_property_add(obj, "alua_preferred", "bool", + scsi_disk_get_alua_pref, + scsi_disk_set_alua_pref, NULL, NULL, NULL); + object_property_set_bool(obj, false, "alua_preferred", NULL); } static const TypeInfo scsi_disk_info = { -- 1.8.4.5