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:
Cédric Bosdonnat 2015-07-15 10:13:21 +02:00
parent 8dd8df6f7c
commit 4749fec10d
1 changed files with 15 additions and 0 deletions

View File

@ -537,12 +537,27 @@ static int virLXCControllerAppendNBDPids(virLXCControllerPtr ctrl,
size_t npids = 0;
size_t i;
int ret = -1;
size_t loops = 0;
pid_t pid;
if (!STRPREFIX(dev, "/dev/") ||
virAsprintf(&pidpath, "/sys/devices/virtual/block/%s/pid", dev + 5) < 0)
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)
goto cleanup;