{
virBuffer opt = VIR_BUFFER_INITIALIZER;
const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus);
+ const char *trans =
+ virDomainDiskGeometryTransTypeToString(disk->geometry.trans);
int idx = virDiskNameToIndex(disk->dst);
int busid = -1, unitid = -1;
disk->type != VIR_DOMAIN_DISK_TYPE_DIR &&
qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_FORMAT))
virBufferAsprintf(&opt, ",format=%s", disk->driverType);
+
+ /* generate geometry command string */
+ if (disk->geometry.cylinders > 0 &&
+ disk->geometry.heads > 0 &&
+ disk->geometry.sectors > 0) {
+
+ virBufferAsprintf(&opt, ",cyls=%u,heads=%u,secs=%u",
+ disk->geometry.cylinders,
+ disk->geometry.heads,
+ disk->geometry.sectors);
+
+ if (disk->geometry.trans != VIR_DOMAIN_DISK_TRANS_DEFAULT)
+ virBufferEscapeString(&opt, ",trans=%s", trans);
+ }
+
if (disk->serial &&
qemuCapsGet(qemuCaps, QEMU_CAPS_DRIVE_SERIAL)) {
if (qemuSafeSerialParamValue(disk->serial) < 0)
int idx = -1;
int busid = -1;
int unitid = -1;
+ int trans = VIR_DOMAIN_DISK_TRANS_DEFAULT;
if ((nkeywords = qemuParseKeywords(val,
&keywords,
virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse io mode '%s'"), values[i]);
}
+ } else if (STREQ(keywords[i], "cyls")) {
+ if (virStrToLong_ui(values[i], NULL, 10,
+ &(def->geometry.cylinders)) < 0) {
+ virDomainDiskDefFree(def);
+ def = NULL;
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse cylinders value'%s'"),
+ values[i]);
+ }
+ } else if (STREQ(keywords[i], "heads")) {
+ if (virStrToLong_ui(values[i], NULL, 10,
+ &(def->geometry.heads)) < 0) {
+ virDomainDiskDefFree(def);
+ def = NULL;
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse heads value'%s'"),
+ values[i]);
+ }
+ } else if (STREQ(keywords[i], "secs")) {
+ if (virStrToLong_ui(values[i], NULL, 10,
+ &(def->geometry.sectors)) < 0) {
+ virDomainDiskDefFree(def);
+ def = NULL;
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse sectors value'%s'"),
+ values[i]);
+ }
+ } else if (STREQ(keywords[i], "trans")) {
+ def->geometry.trans =
+ virDomainDiskGeometryTransTypeFromString(values[i]);
+ if ((trans < VIR_DOMAIN_DISK_TRANS_DEFAULT) ||
+ (trans >= VIR_DOMAIN_DISK_TRANS_LAST)) {
+ virDomainDiskDefFree(def);
+ def = NULL;
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse translation value'%s'"),
+ values[i]);
+ }
}
}
--- /dev/null
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory>219136</memory>
+ <currentMemory>219136</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch='i686' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu</emulator>
+ <disk type='block' device='disk'>
+ <source dev='/dev/HostVG/QEMUGuest1'/>
+ <geometry cyls='16383' heads='16' secs='63' trans='lba'/>
+ <target dev='hda' bus='ide'/>
+ <address type='drive' controller='0' bus='0' unit='0'/>
+ </disk>
+ <controller type='ide' index='0'/>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>