[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