qemuDomainDiskChangeSupported: Deny changing reservations
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@redhat.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
687730540e
commit
c7c9dea0a0
@ -2803,6 +2803,7 @@ virStorageNetHostTransportTypeToString;
|
|||||||
virStorageNetProtocolTypeToString;
|
virStorageNetProtocolTypeToString;
|
||||||
virStoragePRDefFormat;
|
virStoragePRDefFormat;
|
||||||
virStoragePRDefFree;
|
virStoragePRDefFree;
|
||||||
|
virStoragePRDefIsEqual;
|
||||||
virStoragePRDefParseXML;
|
virStoragePRDefParseXML;
|
||||||
virStorageSourceBackingStoreClear;
|
virStorageSourceBackingStoreClear;
|
||||||
virStorageSourceClear;
|
virStorageSourceClear;
|
||||||
|
@ -7842,6 +7842,14 @@ qemuDomainDiskChangeSupported(virDomainDiskDefPtr disk,
|
|||||||
CHECK_EQ(src->readonly, "readonly", true);
|
CHECK_EQ(src->readonly, "readonly", true);
|
||||||
CHECK_EQ(src->shared, "shared", 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
|
#undef CHECK_EQ
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -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
|
virSecurityDeviceLabelDefPtr
|
||||||
virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
|
virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
|
||||||
const char *model)
|
const char *model)
|
||||||
|
@ -395,6 +395,8 @@ void virStoragePRDefFree(virStoragePRDefPtr prd);
|
|||||||
virStoragePRDefPtr virStoragePRDefParseXML(xmlXPathContextPtr ctxt);
|
virStoragePRDefPtr virStoragePRDefParseXML(xmlXPathContextPtr ctxt);
|
||||||
void virStoragePRDefFormat(virBufferPtr buf,
|
void virStoragePRDefFormat(virBufferPtr buf,
|
||||||
virStoragePRDefPtr prd);
|
virStoragePRDefPtr prd);
|
||||||
|
bool virStoragePRDefIsEqual(virStoragePRDefPtr a,
|
||||||
|
virStoragePRDefPtr b);
|
||||||
|
|
||||||
virSecurityDeviceLabelDefPtr
|
virSecurityDeviceLabelDefPtr
|
||||||
virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
|
virStorageSourceGetSecurityLabelDef(virStorageSourcePtr src,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user