isLink = S_ISLNK(sb.st_mode);
isDev = S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode);
- isReg = S_ISREG(sb.st_mode);
+ isReg = S_ISREG(sb.st_mode) || S_ISFIFO(sb.st_mode) || S_ISSOCK(sb.st_mode);
/* Here, @device might be whatever path in the system. We
* should create the path in the namespace iff it's "/dev"
void *opaque)
{
const struct qemuDomainCreateDeviceData *data = opaque;
+ const char *path = NULL;
+
+ if (!(path = virDomainChrSourceDefGetPath(dev->source)))
+ return 0;
- if (dev->source->type != VIR_DOMAIN_CHR_TYPE_DEV)
+ /* Socket created by qemu. It doesn't exist upfront. */
+ if (dev->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
+ dev->source->data.nix.listen)
return 0;
- return qemuDomainCreateDevice(dev->source->data.file.path, data, false);
+ return qemuDomainCreateDevice(path, data, true);
}
bool delDevice = false;
bool isLink = S_ISLNK(data->sb.st_mode);
bool isDev = S_ISCHR(data->sb.st_mode) || S_ISBLK(data->sb.st_mode);
- bool isReg = S_ISREG(data->sb.st_mode);
+ bool isReg = S_ISREG(data->sb.st_mode) || S_ISFIFO(data->sb.st_mode) || S_ISSOCK(data->sb.st_mode);
qemuSecurityPostFork(data->driver->securityManager);
* as its backing chain. This might however clash here.
* Therefore do the cleanup here. */
if (umount(data->file) < 0 &&
- errno != ENOENT) {
+ errno != ENOENT && errno != EINVAL) {
virReportSystemError(errno,
_("Unable to umount %s"),
data->file);
}
isLink = S_ISLNK(data.sb.st_mode);
- isReg = S_ISREG(data.sb.st_mode);
+ isReg = S_ISREG(data.sb.st_mode) || S_ISFIFO(data.sb.st_mode) || S_ISSOCK(data.sb.st_mode);
if (isReg && STRPREFIX(file, DEVPREFIX)) {
cfg = virQEMUDriverGetConfig(driver);
if (!qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT))
return 0;
- if (chr->source->type != VIR_DOMAIN_CHR_TYPE_DEV)
+ if (!(path = virDomainChrSourceDefGetPath(chr->source)))
return 0;
- path = chr->source->data.file.path;
+ /* Socket created by qemu. It doesn't exist upfront. */
+ if (chr->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
+ chr->source->data.nix.listen)
+ return 0;
cfg = virQEMUDriverGetConfig(driver);
if (qemuDomainGetPreservedMounts(cfg, vm,