From bfd0b144b661dd027e363a0eba83144ea460af82 Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Thu, 22 May 2014 15:50:08 -0500 Subject: [PATCH] nbd: give paritions some time to show up MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/lxc/bdev.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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); -- 2.47.2