mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 21:34:54 +03:00
conf: add rawio attribute to disk element of domain XML
This patch adds a new attribute "rawio" to the "disk" element of domain XML. Valid values of "rawio" attribute are "yes" and "no". rawio='yes' indicates the disk is desirous of CAP_SYS_RAWIO. If you specify the following XML: <disk type='block' device='lun' rawio='yes'> ... </disk> the domain will be granted CAP_SYS_RAWIO. (of course, the domain have to be executed with root privilege) NOTE: - "rawio" attribute is only valid when device='lun' - At the moment, any other disks you won't use rawio can use rawio. Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com>
This commit is contained in:
parent
e545dd4ffe
commit
397e6a705b
@ -1096,8 +1096,11 @@
|
|||||||
- also note that device='lun' will only be recognized for
|
- also note that device='lun' will only be recognized for
|
||||||
actual raw devices, never for individual partitions or LVM
|
actual raw devices, never for individual partitions or LVM
|
||||||
partitions (in those cases, the kernel will reject the generic
|
partitions (in those cases, the kernel will reject the generic
|
||||||
SCSI commands, making it identical to device='disk'). The
|
SCSI commands, making it identical to device='disk').
|
||||||
optional <code>snapshot</code> attribute indicates the default
|
The optional <code>rawio</code> attribute indicates that the disk
|
||||||
|
is desirous of rawio capability. This attribute is only valid when
|
||||||
|
device is "lun".
|
||||||
|
The optional <code>snapshot</code> attribute indicates the default
|
||||||
behavior of the disk during disk snapshots: "internal"
|
behavior of the disk during disk snapshots: "internal"
|
||||||
requires a file format such as qcow2 that can store both the
|
requires a file format such as qcow2 that can store both the
|
||||||
snapshot and the data changes since the snapshot;
|
snapshot and the data changes since the snapshot;
|
||||||
|
@ -805,6 +805,14 @@
|
|||||||
</choice>
|
</choice>
|
||||||
</attribute>
|
</attribute>
|
||||||
</optional>
|
</optional>
|
||||||
|
<optional>
|
||||||
|
<attribute name="rawio">
|
||||||
|
<choice>
|
||||||
|
<value>yes</value>
|
||||||
|
<value>no</value>
|
||||||
|
</choice>
|
||||||
|
</attribute>
|
||||||
|
</optional>
|
||||||
<optional>
|
<optional>
|
||||||
<ref name="snapshot"/>
|
<ref name="snapshot"/>
|
||||||
</optional>
|
</optional>
|
||||||
|
@ -2806,6 +2806,7 @@ virDomainDiskDefParseXML(virCapsPtr caps,
|
|||||||
char *type = NULL;
|
char *type = NULL;
|
||||||
char *device = NULL;
|
char *device = NULL;
|
||||||
char *snapshot = NULL;
|
char *snapshot = NULL;
|
||||||
|
char *rawio = NULL;
|
||||||
char *driverName = NULL;
|
char *driverName = NULL;
|
||||||
char *driverType = NULL;
|
char *driverType = NULL;
|
||||||
char *source = NULL;
|
char *source = NULL;
|
||||||
@ -2850,6 +2851,8 @@ virDomainDiskDefParseXML(virCapsPtr caps,
|
|||||||
|
|
||||||
snapshot = virXMLPropString(node, "snapshot");
|
snapshot = virXMLPropString(node, "snapshot");
|
||||||
|
|
||||||
|
rawio = virXMLPropString(node, "rawio");
|
||||||
|
|
||||||
cur = node->children;
|
cur = node->children;
|
||||||
while (cur != NULL) {
|
while (cur != NULL) {
|
||||||
if (cur->type == XML_ELEMENT_NODE) {
|
if (cur->type == XML_ELEMENT_NODE) {
|
||||||
@ -3156,6 +3159,26 @@ virDomainDiskDefParseXML(virCapsPtr caps,
|
|||||||
def->snapshot = VIR_DOMAIN_DISK_SNAPSHOT_NO;
|
def->snapshot = VIR_DOMAIN_DISK_SNAPSHOT_NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rawio) {
|
||||||
|
def->rawio_specified = true;
|
||||||
|
if (def->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
|
||||||
|
if (STREQ(rawio, "yes")) {
|
||||||
|
def->rawio = 1;
|
||||||
|
} else if (STREQ(rawio, "no")) {
|
||||||
|
def->rawio = 0;
|
||||||
|
} else {
|
||||||
|
virDomainReportError(VIR_ERR_XML_ERROR,
|
||||||
|
_("unknown disk rawio setting '%s'"),
|
||||||
|
rawio);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
virDomainReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("rawio can be used only with device='lun'"));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (bus) {
|
if (bus) {
|
||||||
if ((def->bus = virDomainDiskBusTypeFromString(bus)) < 0) {
|
if ((def->bus = virDomainDiskBusTypeFromString(bus)) < 0) {
|
||||||
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
@ -9972,6 +9995,13 @@ virDomainDiskDefFormat(virBufferPtr buf,
|
|||||||
virBufferAsprintf(buf,
|
virBufferAsprintf(buf,
|
||||||
" <disk type='%s' device='%s'",
|
" <disk type='%s' device='%s'",
|
||||||
type, device);
|
type, device);
|
||||||
|
if (def->rawio_specified) {
|
||||||
|
if (def->rawio == 1) {
|
||||||
|
virBufferAddLit(buf, " rawio='yes'");
|
||||||
|
} else if (def->rawio == 0) {
|
||||||
|
virBufferAddLit(buf, " rawio='no'");
|
||||||
|
}
|
||||||
|
}
|
||||||
if (def->snapshot &&
|
if (def->snapshot &&
|
||||||
!(def->snapshot == VIR_DOMAIN_DISK_SNAPSHOT_NO && def->readonly))
|
!(def->snapshot == VIR_DOMAIN_DISK_SNAPSHOT_NO && def->readonly))
|
||||||
virBufferAsprintf(buf, " snapshot='%s'",
|
virBufferAsprintf(buf, " snapshot='%s'",
|
||||||
|
@ -413,6 +413,8 @@ struct _virDomainDiskDef {
|
|||||||
unsigned int transient : 1;
|
unsigned int transient : 1;
|
||||||
virDomainDeviceInfo info;
|
virDomainDeviceInfo info;
|
||||||
virStorageEncryptionPtr encryption;
|
virStorageEncryptionPtr encryption;
|
||||||
|
bool rawio_specified;
|
||||||
|
int rawio; /* no = 0, yes = 1 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,8 +4,8 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
|
|||||||
-boot dc -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \
|
-boot dc -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \
|
||||||
-drive file=/dev/sdfake,if=none,id=drive-virtio-disk0 \
|
-drive file=/dev/sdfake,if=none,id=drive-virtio-disk0 \
|
||||||
-device virtio-blk-pci,scsi=on,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 \
|
-device virtio-blk-pci,scsi=on,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 \
|
||||||
-drive file=/var/lib/libvirt/Fedora-14-x86_64-Live-KDE.iso,if=none,media=cdrom,id=drive-ide0-1-0 \
|
-drive file=/dev/sdfake2,if=none,id=drive-virtio-disk1 \
|
||||||
-device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 \
|
-device virtio-blk-pci,scsi=on,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,id=virtio-disk1 \
|
||||||
-device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:e5:48:58,bus=pci.0,addr=0x3 \
|
-device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:e5:48:58,bus=pci.0,addr=0x3 \
|
||||||
-net user,vlan=0,name=hostnet0 -serial pty -usb -vnc 127.0.0.1:-809 -std-vga \
|
-net user,vlan=0,name=hostnet0 -serial pty -usb -vnc 127.0.0.1:-809 -std-vga \
|
||||||
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
|
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7
|
||||||
|
@ -16,18 +16,17 @@
|
|||||||
<on_crash>restart</on_crash>
|
<on_crash>restart</on_crash>
|
||||||
<devices>
|
<devices>
|
||||||
<emulator>/usr/bin/qemu</emulator>
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
<disk type='block' device='lun'>
|
<disk type='block' device='lun' rawio='yes'>
|
||||||
<driver name='qemu' type='qcow2'/>
|
<driver name='qemu' type='qcow2'/>
|
||||||
<source dev='/dev/sdfake'/>
|
<source dev='/dev/sdfake'/>
|
||||||
<target dev='vda' bus='virtio'/>
|
<target dev='vda' bus='virtio'/>
|
||||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
|
||||||
</disk>
|
</disk>
|
||||||
<disk type='file' device='cdrom'>
|
<disk type='block' device='lun'>
|
||||||
<driver name='qemu' type='raw'/>
|
<driver name='qemu' type='qcow2'/>
|
||||||
<source file='/var/lib/libvirt/Fedora-14-x86_64-Live-KDE.iso'/>
|
<source dev='/dev/sdfake2'/>
|
||||||
<target dev='hdc' bus='ide'/>
|
<target dev='vdb' bus='virtio'/>
|
||||||
<readonly/>
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||||
<address type='drive' controller='0' bus='1' unit='0'/>
|
|
||||||
</disk>
|
</disk>
|
||||||
<controller type='virtio-serial' index='0'>
|
<controller type='virtio-serial' index='0'>
|
||||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
|
||||||
|
Loading…
Reference in New Issue
Block a user