From: Serge Hallyn Date: Thu, 22 May 2014 20:50:08 +0000 (-0500) Subject: nbd: give paritions some time to show up X-Git-Tag: lxc-1.1.0.alpha1~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bfd0b144b661dd027e363a0eba83144ea460af82;p=thirdparty%2Flxc.git nbd: give paritions some time to show up If you attach a file to /dev/nbd0, it may take some time for /dev/nbd0p1 to show up. Allow up to 5 seconds in that case, then bail. Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- diff --git a/src/lxc/bdev.c b/src/lxc/bdev.c index 20c4b55d5..c0051e63e 100644 --- a/src/lxc/bdev.c +++ b/src/lxc/bdev.c @@ -2631,6 +2631,19 @@ static int nbd_get_partition(const char *src) return *p - '0'; } +static bool wait_for_partition(const char *path) +{ + int count = 0; + while (count < 5) { + if (file_exists(path)) + return true; + sleep(1); + count++; + } + ERROR("Device %s did not show up after 5 seconds", path); + return false; +} + static int nbd_mount(struct bdev *bdev) { int ret = -1, partition; @@ -2654,6 +2667,12 @@ static int nbd_mount(struct bdev *bdev) ERROR("Error setting up nbd device path"); return ret; } + + /* It might take awhile for the partition files to show up */ + if (partition) { + if (!wait_for_partition(path)) + return -2; + } ret = mount_unknown_fs(path, bdev->dest, bdev->mntopts); if (ret < 0) ERROR("Error mounting %s", bdev->src);