Don't trigger SYSERROR for optional mounts

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
This commit is contained in:
Stéphane Graber 2014-03-07 16:18:15 -05:00
parent 36eaa69415
commit 1fc64d22ae

View File

@ -1821,11 +1821,18 @@ int parse_mntopts(const char *mntopts, unsigned long *mntflags,
static int mount_entry(const char *fsname, const char *target, static int mount_entry(const char *fsname, const char *target,
const char *fstype, unsigned long mountflags, const char *fstype, unsigned long mountflags,
const char *data) const char *data, int optional)
{ {
if (mount(fsname, target, fstype, mountflags & ~MS_REMOUNT, data)) { if (mount(fsname, target, fstype, mountflags & ~MS_REMOUNT, data)) {
SYSERROR("failed to mount '%s' on '%s'", fsname, target); if (optional) {
return -1; 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)) { 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, if (mount(fsname, target, fstype,
mountflags | MS_REMOUNT, data)) { mountflags | MS_REMOUNT, data)) {
SYSERROR("failed to mount '%s' on '%s'", if (optional) {
fsname, target); INFO("failed to mount '%s' on '%s' (optional): %s",
return -1; 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, ret = mount_entry(mntent->mnt_fsname, mntent->mnt_dir,
mntent->mnt_type, mntflags, mntdata); mntent->mnt_type, mntflags, mntdata, optional);
if (optional)
ret = 0;
free(pathdirname); free(pathdirname);
free(mntdata); free(mntdata);
@ -2000,13 +2011,10 @@ skipabs:
} }
ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type, ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type,
mntflags, mntdata); mntflags, mntdata, optional);
free(mntdata); free(mntdata);
if (optional)
ret = 0;
out: out:
free(pathdirname); free(pathdirname);
return ret; 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, ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type,
mntflags, mntdata); mntflags, mntdata, optional);
if (optional)
ret = 0;
free(pathdirname); free(pathdirname);
free(mntdata); free(mntdata);