}
+static void
+virDomainDiskExpandGroupIoTune(virDomainDiskDefPtr disk,
+ const virDomainDef *def)
+{
+ size_t i;
+
+ if (!disk->blkdeviotune.group_name ||
+ virDomainBlockIoTuneInfoHasAny(&disk->blkdeviotune))
+ return;
+
+ for (i = 0; i < def->ndisks; i++) {
+ virDomainDiskDefPtr d = def->disks[i];
+
+ if (STRNEQ_NULLABLE(disk->blkdeviotune.group_name, d->blkdeviotune.group_name) ||
+ !virDomainBlockIoTuneInfoHasAny(&d->blkdeviotune))
+ continue;
+
+
+ VIR_FREE(disk->blkdeviotune.group_name);
+ virDomainBlockIoTuneInfoCopy(&d->blkdeviotune, &disk->blkdeviotune);
+
+ return;
+ }
+}
+
+
static int
virDomainDiskDefPostParse(virDomainDiskDefPtr disk,
const virDomainDef *def,
return -1;
}
+ virDomainDiskExpandGroupIoTune(disk, def);
+
return 0;
}
virDomainBlockIoTuneInfoHasMax(iotune) ||
virDomainBlockIoTuneInfoHasMaxLength(iotune);
}
+
+
+void
+virDomainBlockIoTuneInfoCopy(const virDomainBlockIoTuneInfo *src,
+ virDomainBlockIoTuneInfoPtr dst)
+{
+ *dst = *src;
+ dst->group_name = g_strdup(src->group_name);
+}
unsigned long long total_iops_sec_max_length;
unsigned long long read_iops_sec_max_length;
unsigned long long write_iops_sec_max_length;
+ /* Don't forget to update virDomainBlockIoTuneInfoCopy. */
};
bool
virDomainBlockIoTuneInfoHasAny(const virDomainBlockIoTuneInfo *iotune);
+
+void
+virDomainBlockIoTuneInfoCopy(const virDomainBlockIoTuneInfo *src,
+ virDomainBlockIoTuneInfoPtr dst);
virDomainActualNetDefValidate;
virDomainBlockedReasonTypeFromString;
virDomainBlockedReasonTypeToString;
+virDomainBlockIoTuneInfoCopy;
virDomainBlockIoTuneInfoHasAny;
virDomainBlockIoTuneInfoHasBasic;
virDomainBlockIoTuneInfoHasMax;