[lxc-devel] [PATCH 2/2] nbd: give paritions some time to show up

Serge Hallyn serge.hallyn at ubuntu.com
Thu May 22 20:50:08 UTC 2014


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 <serge.hallyn at ubuntu.com>
---
 src/lxc/bdev.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/lxc/bdev.c b/src/lxc/bdev.c
index 20c4b55..c0051e6 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.0.0.rc0



More information about the lxc-devel mailing list