[lxc-devel] [PATCH] Don't trigger SYSERROR for optional mounts

Stéphane Graber stgraber at ubuntu.com
Fri Mar 7 22:22:15 UTC 2014


Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 src/lxc/conf.c | 41 +++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 18 deletions(-)

diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 58a9b4f..4346585 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -1821,11 +1821,18 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags,
 
 static int mount_entry(const char *fsname, const char *target,
 		       const char *fstype, unsigned long mountflags,
-		       const char *data)
+		       const char *data, int optional)
 {
 	if (mount(fsname, target, fstype, mountflags & ~MS_REMOUNT, data)) {
-		SYSERROR("failed to mount '%s' on '%s'", fsname, target);
-		return -1;
+		if (optional) {
+			INFO("failed to mount '%s' on '%s' (optional): %s", fsname,
+			     target, strerror(errno));
+			return 0;
+		}
+		else {
+			SYSERROR("failed to mount '%s' on '%s'", fsname, target);
+			return -1;
+		}
 	}
 
 	if ((mountflags & MS_REMOUNT) || (mountflags & MS_BIND)) {
@@ -1835,9 +1842,16 @@ static int mount_entry(const char *fsname, const char *target,
 
 		if (mount(fsname, target, fstype,
 			  mountflags | MS_REMOUNT, data)) {
-			SYSERROR("failed to mount '%s' on '%s'",
-				 fsname, target);
-			return -1;
+			if (optional) {
+				INFO("failed to mount '%s' on '%s' (optional): %s",
+					 fsname, target, strerror(errno));
+				return 0;
+			}
+			else {
+				SYSERROR("failed to mount '%s' on '%s'",
+					 fsname, target);
+				return -1;
+			}
 		}
 	}
 
@@ -1910,10 +1924,7 @@ static inline int mount_entry_on_systemfs(struct mntent *mntent)
 	}
 
 	ret = mount_entry(mntent->mnt_fsname, mntent->mnt_dir,
-			  mntent->mnt_type, mntflags, mntdata);
-
-	if (optional)
-		ret = 0;
+			  mntent->mnt_type, mntflags, mntdata, optional);
 
 	free(pathdirname);
 	free(mntdata);
@@ -2000,13 +2011,10 @@ skipabs:
 	}
 
 	ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type,
-			  mntflags, mntdata);
+			  mntflags, mntdata, optional);
 
 	free(mntdata);
 
-	if (optional)
-		ret = 0;
-
 out:
 	free(pathdirname);
 	return ret;
@@ -2059,10 +2067,7 @@ static int mount_entry_on_relative_rootfs(struct mntent *mntent,
 	}
 
 	ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type,
-			  mntflags, mntdata);
-
-	if (optional)
-		ret = 0;
+			  mntflags, mntdata, optional);
 
 	free(pathdirname);
 	free(mntdata);
-- 
1.9.0



More information about the lxc-devel mailing list