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 <mprivozn(a)redhat.com>
Reviewed-by: John Ferlan <jferlan(a)redhat.com>
---
src/libvirt_private.syms | 1 +
src/qemu/qemu_domain.c | 8 ++++++++
src/util/virstoragefile.c | 19 +++++++++++++++++++
src/util/virstoragefile.h | 2 ++
4 files changed, 30 insertions(+)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index f81cb5df93..27c5bb5bce 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 326c939c85..0dc5a88e79 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -7836,6 +7836,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 42ef24e9d5..d0050eca1f 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2022,6 +2022,25 @@ 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 69e7e20e17..09e9ae73f1 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -382,6 +382,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