diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 2ea9005ac3..5b5cfa302e 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -23692,6 +23692,70 @@ virDomainDiskDefFormatIotune(virBufferPtr buf, #undef FORMAT_IOTUNE +static int +virDomainDiskDefFormatDriver(virBufferPtr buf, + virDomainDiskDefPtr disk) +{ + virBuffer driverBuf = VIR_BUFFER_INITIALIZER; + int ret = -1; + + virBufferEscapeString(&driverBuf, " name='%s'", virDomainDiskGetDriver(disk)); + + if (disk->src->format > 0) + virBufferAsprintf(&driverBuf, " type='%s'", + virStorageFileFormatTypeToString(disk->src->format)); + + if (disk->cachemode) + virBufferAsprintf(&driverBuf, " cache='%s'", + virDomainDiskCacheTypeToString(disk->cachemode)); + + if (disk->error_policy) + virBufferAsprintf(&driverBuf, " error_policy='%s'", + virDomainDiskErrorPolicyTypeToString(disk->error_policy)); + + if (disk->rerror_policy) + virBufferAsprintf(&driverBuf, " rerror_policy='%s'", + virDomainDiskErrorPolicyTypeToString(disk->rerror_policy)); + + if (disk->iomode) + virBufferAsprintf(&driverBuf, " io='%s'", + virDomainDiskIoTypeToString(disk->iomode)); + + if (disk->ioeventfd) + virBufferAsprintf(&driverBuf, " ioeventfd='%s'", + virTristateSwitchTypeToString(disk->ioeventfd)); + + if (disk->event_idx) + virBufferAsprintf(&driverBuf, " event_idx='%s'", + virTristateSwitchTypeToString(disk->event_idx)); + + if (disk->copy_on_read) + virBufferAsprintf(&driverBuf, " copy_on_read='%s'", + virTristateSwitchTypeToString(disk->copy_on_read)); + + if (disk->discard) + virBufferAsprintf(&driverBuf, " discard='%s'", + virDomainDiskDiscardTypeToString(disk->discard)); + + if (disk->iothread) + virBufferAsprintf(&driverBuf, " iothread='%u'", disk->iothread); + + if (disk->detect_zeroes) + virBufferAsprintf(&driverBuf, " detect_zeroes='%s'", + virDomainDiskDetectZeroesTypeToString(disk->detect_zeroes)); + + if (disk->queues) + virBufferAsprintf(&driverBuf, " queues='%u'", disk->queues); + + virDomainVirtioOptionsFormat(&driverBuf, disk->virtio); + + ret = virXMLFormatElement(buf, "driver", &driverBuf, NULL); + + virBufferFreeAndReset(&driverBuf); + return ret; +} + + static int virDomainDiskDefFormat(virBufferPtr buf, virDomainDiskDefPtr def, @@ -23701,17 +23765,7 @@ virDomainDiskDefFormat(virBufferPtr buf, const char *type = virStorageTypeToString(def->src->type); const char *device = virDomainDiskDeviceTypeToString(def->device); const char *bus = virDomainDiskBusTypeToString(def->bus); - const char *cachemode = virDomainDiskCacheTypeToString(def->cachemode); - const char *error_policy = virDomainDiskErrorPolicyTypeToString(def->error_policy); - const char *rerror_policy = virDomainDiskErrorPolicyTypeToString(def->rerror_policy); - const char *iomode = virDomainDiskIoTypeToString(def->iomode); - const char *ioeventfd = virTristateSwitchTypeToString(def->ioeventfd); - const char *event_idx = virTristateSwitchTypeToString(def->event_idx); - const char *copy_on_read = virTristateSwitchTypeToString(def->copy_on_read); const char *sgio = virDomainDeviceSGIOTypeToString(def->sgio); - const char *discard = virDomainDiskDiscardTypeToString(def->discard); - const char *detect_zeroes = virDomainDiskDetectZeroesTypeToString(def->detect_zeroes); - virBuffer driverBuf = VIR_BUFFER_INITIALIZER; if (!type || !def->src->type) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -23728,16 +23782,6 @@ virDomainDiskDefFormat(virBufferPtr buf, _("unexpected disk bus %d"), def->bus); return -1; } - if (!cachemode) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unexpected disk cache mode %d"), def->cachemode); - return -1; - } - if (!iomode) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("unexpected disk io mode %d"), def->iomode); - return -1; - } if (!sgio) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unexpected disk sgio mode '%d'"), def->sgio); @@ -23763,44 +23807,9 @@ virDomainDiskDefFormat(virBufferPtr buf, virBufferAddLit(buf, ">\n"); virBufferAdjustIndent(buf, 2); - virBufferEscapeString(&driverBuf, " name='%s'", virDomainDiskGetDriver(def)); - if (def->src->format > 0) - virBufferAsprintf(&driverBuf, " type='%s'", - virStorageFileFormatTypeToString(def->src->format)); - if (def->cachemode) - virBufferAsprintf(&driverBuf, " cache='%s'", cachemode); - if (def->error_policy) - virBufferAsprintf(&driverBuf, " error_policy='%s'", error_policy); - if (def->rerror_policy) - virBufferAsprintf(&driverBuf, " rerror_policy='%s'", rerror_policy); - if (def->iomode) - virBufferAsprintf(&driverBuf, " io='%s'", iomode); - if (def->ioeventfd) - virBufferAsprintf(&driverBuf, " ioeventfd='%s'", ioeventfd); - if (def->event_idx) - virBufferAsprintf(&driverBuf, " event_idx='%s'", event_idx); - if (def->copy_on_read) - virBufferAsprintf(&driverBuf, " copy_on_read='%s'", copy_on_read); - if (def->discard) - virBufferAsprintf(&driverBuf, " discard='%s'", discard); - if (def->iothread) - virBufferAsprintf(&driverBuf, " iothread='%u'", def->iothread); - if (def->detect_zeroes) - virBufferAsprintf(&driverBuf, " detect_zeroes='%s'", detect_zeroes); - if (def->queues) - virBufferAsprintf(&driverBuf, " queues='%u'", def->queues); - - virDomainVirtioOptionsFormat(&driverBuf, def->virtio); - - if (virBufferCheckError(&driverBuf) < 0) + if (virDomainDiskDefFormatDriver(buf, def) < 0) return -1; - if (virBufferUse(&driverBuf)) { - virBufferAddLit(buf, "\n"); - } - /* Format as child of if defined there; otherwise, * if defined as child of , then format later */ if (def->src->auth && !def->src->authInherited)