mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-27 23:15:18 +00:00
lxc: wait for nbd device to be up to get its PIDs
The nbd device pid file doesn't appear immediately after starting qemu-nbd: adding a small loop to wait for it before getting it's processes PIDs.
This commit is contained in:
parent
8dd8df6f7c
commit
4749fec10d
@ -537,12 +537,27 @@ static int virLXCControllerAppendNBDPids(virLXCControllerPtr ctrl,
|
|||||||
size_t npids = 0;
|
size_t npids = 0;
|
||||||
size_t i;
|
size_t i;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
size_t loops = 0;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
|
||||||
if (!STRPREFIX(dev, "/dev/") ||
|
if (!STRPREFIX(dev, "/dev/") ||
|
||||||
virAsprintf(&pidpath, "/sys/devices/virtual/block/%s/pid", dev + 5) < 0)
|
virAsprintf(&pidpath, "/sys/devices/virtual/block/%s/pid", dev + 5) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
/* Wait for the pid file to appear */
|
||||||
|
while (!virFileExists(pidpath)) {
|
||||||
|
/* wait for 100ms before checking again, but don't do it for ever */
|
||||||
|
if (errno == ENOENT && loops < 10) {
|
||||||
|
usleep(100 * 1000);
|
||||||
|
loops++;
|
||||||
|
} else {
|
||||||
|
virReportSystemError(errno,
|
||||||
|
_("Cannot check NBD device %s pid"),
|
||||||
|
dev + 5);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (virPidFileReadPath(pidpath, &pid) < 0)
|
if (virPidFileReadPath(pidpath, &pid) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user