From 4749fec10d414dc45b7bbf04bddd2620528d5f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= Date: Wed, 15 Jul 2015 10:13:21 +0200 Subject: [PATCH] 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. --- src/lxc/lxc_controller.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c index c73bb4f580..110a55662b 100644 --- a/src/lxc/lxc_controller.c +++ b/src/lxc/lxc_controller.c @@ -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;