``file``
The ``file`` attribute specifies the fully-qualified path to the file
holding the disk. :since:`Since 0.0.3`
+
+ :since:`Since 9.0.0` a new optional attribute ``fdgroup`` can be added
+ instructing to access the disk via file descriptiors associated to the
+ domain object via the ``virDomainFDAssociate()`` API rather than opening
+ the files. The files do not necessarily have to be accessible by libvirt
+ via the filesystem. The filename passed via ``file`` can still be used
+ to generate paths to write into image metadata when doing block operations
+ but libvirt will not access these natively.
``block``
The ``dev`` attribute specifies the fully-qualified path to the host
device to serve as the disk. :since:`Since 0.0.3`
switch (src->type) {
case VIR_STORAGE_TYPE_FILE:
src->path = virXMLPropString(node, "file");
+ src->fdgroup = virXMLPropString(node, "fdgroup");
break;
case VIR_STORAGE_TYPE_BLOCK:
src->path = virXMLPropString(node, "dev");
switch (src->type) {
case VIR_STORAGE_TYPE_FILE:
virBufferEscapeString(&attrBuf, " file='%s'", src->path);
+ virBufferEscapeString(&attrBuf, " fdgroup='%s'", src->fdgroup);
break;
case VIR_STORAGE_TYPE_BLOCK:
VIR_DOMAIN_DEF_FEATURE_NO_BOOT_ORDER = (1 << 6),
VIR_DOMAIN_DEF_FEATURE_FW_AUTOSELECT = (1 << 7),
VIR_DOMAIN_DEF_FEATURE_NET_MODEL_STRING = (1 << 8),
+ VIR_DOMAIN_DEF_FEATURE_DISK_FD = (1 << 9),
} virDomainDefFeatures;
return -1;
}
+ if (dev->type == VIR_DOMAIN_DEVICE_DISK &&
+ dev->data.disk->src->fdgroup &&
+ UNSUPPORTED(VIR_DOMAIN_DEF_FEATURE_DISK_FD)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("driver does not support FD passing for disk '%s'"),
+ dev->data.disk->dst);
+ return -1;
+ }
+
return 0;
}
#undef UNSUPPORTED
<ref name="vmwarePath"/>
</choice>
</attribute>
+ <optional>
+ <attribute name="fdgroup"/>
+ </optional>
</optional>
<ref name="diskSourceCommon"/>
<optional>
def->drv = NULL;
def->path = g_strdup(src->path);
+ def->fdgroup = g_strdup(src->fdgroup);
def->volume = g_strdup(src->volume);
def->relPath = g_strdup(src->relPath);
def->backingStoreRaw = g_strdup(src->backingStoreRaw);
return;
VIR_FREE(def->path);
+ VIR_FREE(def->fdgroup);
VIR_FREE(def->volume);
VIR_FREE(def->snapshot);
VIR_FREE(def->configFile);
unsigned int id; /* backing chain identifier, 0 is unset */
virStorageType type;
char *path;
+ char *fdgroup; /* name of group of file descriptors the user wishes to use instead of 'path' */
int protocol; /* virStorageNetProtocol */
char *volume; /* volume name for remote storage */
char *snapshot; /* for storage systems supporting internal snapshots */
.features = VIR_DOMAIN_DEF_FEATURE_MEMORY_HOTPLUG |
VIR_DOMAIN_DEF_FEATURE_OFFLINE_VCPUPIN |
VIR_DOMAIN_DEF_FEATURE_INDIVIDUAL_VCPUS |
- VIR_DOMAIN_DEF_FEATURE_NET_MODEL_STRING,
+ VIR_DOMAIN_DEF_FEATURE_NET_MODEL_STRING |
+ VIR_DOMAIN_DEF_FEATURE_DISK_FD,
};
static int
--- /dev/null
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='x86_64' 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-system-x86_64</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='/path/to/blah' fdgroup='testgroup2'/>
+ <target dev='vde' bus='virtio'/>
+ </disk>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2'/>
+ <source file='/var/lib/libvirt/images/rhel7.1484071880' fdgroup='testgroup5'/>
+ <backingStore type='file'>
+ <format type='qcow2'/>
+ <source file='/var/lib/libvirt/images/rhel7.1484071877' fdgroup='testgroup6'/>
+ <backingStore type='file'>
+ <format type='qcow2'/>
+ <source file='/var/lib/libvirt/images/rhel7.1484071876'/>
+ <backingStore/>
+ </backingStore>
+ </backingStore>
+ <target dev='vdf' bus='virtio'/>
+ </disk>
+ <controller type='usb'/>
+ <controller type='pci' model='pci-root'/>
+ <memballoon model='virtio'/>
+ </devices>
+</domain>