]> git.ipfire.org Git - thirdparty/libvirt.git/commit
qemu: Handle EEXIST gracefully in qemuDomainCreateDevice
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 4 Jan 2017 12:57:06 +0000 (13:57 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 4 Jan 2017 14:36:42 +0000 (15:36 +0100)
commit3aae99fe71ccee523bafeb54ebd0338eeed66868
treed8000c2f6832cda7c133dfe6797640c1d2ce9a8a
parent8388b1c8268d1d8141f85c7b42649f87056d7fa7
qemu: Handle EEXIST gracefully in qemuDomainCreateDevice

https://bugzilla.redhat.com/show_bug.cgi?id=1406837

Imagine you have a domain configured in such way that you are
assigning two PCI devices that fall into the same IOMMU group.
With mount namespace enabled what happens is that for the first
PCI device corresponding /dev/vfio/X entry is created and when
the code tries to do the same for the second mknod() fails as
/dev/vfio/X already exists:

2016-12-21 14:40:45.648+0000: 24681: error :
qemuProcessReportLogError:1792 : internal error: Process exited
prior to exec: libvirt: QEMU Driver error : Failed to make device
/var/run/libvirt/qemu/windoze.dev//vfio/22: File exists

Worse, by default there are some devices that are created in the
namespace regardless of domain configuration (e.g. /dev/null,
/dev/urandom, etc.). If one of them is set as backend for some
guest device (e.g. rng, chardev, etc.) it's the same story as
described above.

Weirdly, in attach code this is already handled.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_domain.c