Re: [libvirt] [PATCH v4 02/14] qemuDomainDiskChangeSupported: Deny changing reservations

2018-04-13 Thread John Ferlan


On 04/10/2018 10:58 AM, Michal Privoznik wrote:
> Couple of reasons for that:
> 
> a) there's no monitor command to change path where the pr-helper
> connects to, or
> b) there's no monitor command to introduce a new pr-helper for a
> disk that already exists.
> 
> Signed-off-by: Michal Privoznik 
> ---
>  src/libvirt_private.syms  |  1 +
>  src/qemu/qemu_domain.c|  8 
>  src/util/virstoragefile.c | 18 ++
>  src/util/virstoragefile.h |  2 ++
>  4 files changed, 29 insertions(+)
> 

[...]

> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index 9917837513..b017024b2f 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -2022,6 +2022,24 @@ virStoragePRDefFormat(virBufferPtr buf,
>  }
>  
>  
> +bool
> +virStoragePRDefIsEqual(virStoragePRDefPtr a,
> +   virStoragePRDefPtr b)
> +{
> +if (!a && !b)
> +return true;
> +
> +if (!a || !b)
> +return false;
> +
> +if (a->enabled != b->enabled ||
> +a->managed != b->managed ||
> +STRNEQ_NULLABLE(a->path, b->path))
> +return false;
> +
> +return true;
> +}
> +

two blank lines


[...]

Reviewed-by: John Ferlan 

John

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH v4 02/14] qemuDomainDiskChangeSupported: Deny changing reservations

2018-04-10 Thread Michal Privoznik
Couple of reasons for that:

a) there's no monitor command to change path where the pr-helper
connects to, or
b) there's no monitor command to introduce a new pr-helper for a
disk that already exists.

Signed-off-by: Michal Privoznik 
---
 src/libvirt_private.syms  |  1 +
 src/qemu/qemu_domain.c|  8 
 src/util/virstoragefile.c | 18 ++
 src/util/virstoragefile.h |  2 ++
 4 files changed, 29 insertions(+)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b39b694c60..a376e3bb0d 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2799,6 +2799,7 @@ virStorageNetHostTransportTypeToString;
 virStorageNetProtocolTypeToString;
 virStoragePRDefFormat;
 virStoragePRDefFree;
+virStoragePRDefIsEqual;
 virStoragePRDefParseXML;
 virStorageSourceBackingStoreClear;
 virStorageSourceClear;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 100304fd05..5a7b5f8417 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -7820,6 +7820,14 @@ qemuDomainDiskChangeSupported(virDomainDiskDefPtr disk,
 CHECK_EQ(src->readonly, "readonly", true);
 CHECK_EQ(src->shared, "shared", true);
 
+if (!virStoragePRDefIsEqual(disk->src->pr,
+orig_disk->src->pr)) {
+virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
+   _("cannot modify field '%s' of the disk"),
+   "reservations");
+return false;
+}
+
 #undef CHECK_EQ
 
 return true;
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 9917837513..b017024b2f 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2022,6 +2022,24 @@ virStoragePRDefFormat(virBufferPtr buf,
 }
 
 
+bool
+virStoragePRDefIsEqual(virStoragePRDefPtr a,
+   virStoragePRDefPtr b)
+{
+if (!a && !b)
+return true;
+
+if (!a || !b)
+return false;
+
+if (a->enabled != b->enabled ||
+a->managed != b->managed ||
+STRNEQ_NULLABLE(a->path, b->path))
+return false;
+
+return true;
+}
+
 virSecurityDeviceLabelDefPtr
 virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
 const char *model)
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index b705ab1f92..77853eefe8 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -383,6 +383,8 @@ void virStoragePRDefFree(virStoragePRDefPtr prd);
 virStoragePRDefPtr virStoragePRDefParseXML(xmlXPathContextPtr ctxt);
 void virStoragePRDefFormat(virBufferPtr buf,
virStoragePRDefPtr prd);
+bool virStoragePRDefIsEqual(virStoragePRDefPtr a,
+virStoragePRDefPtr b);
 
 virSecurityDeviceLabelDefPtr
 virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
-- 
2.16.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list