diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 66c60a8d7..3aaf31cbc 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -799,12 +799,28 @@ static int mount_file_entries(FILE *file) } if (mount(mntent->mnt_fsname, mntent->mnt_dir, - mntent->mnt_type, mntflags, mntdata)) { + mntent->mnt_type, mntflags & ~MS_REMOUNT, mntdata)) { SYSERROR("failed to mount '%s' on '%s'", mntent->mnt_fsname, mntent->mnt_dir); goto out; } + if ((mntflags & MS_REMOUNT) == MS_REMOUNT || + ((mntflags & MS_BIND) == MS_BIND)) { + + DEBUG ("remounting %s on %s to respect bind " \ + "or remount options", + mntent->mnt_fsname, mntent->mnt_dir); + + if (mount(mntent->mnt_fsname, mntent->mnt_dir, + mntent->mnt_type, + mntflags | MS_REMOUNT, mntdata)) { + SYSERROR("failed to mount '%s' on '%s'", + mntent->mnt_fsname, mntent->mnt_dir); + goto out; + } + } + DEBUG("mounted %s on %s, type %s", mntent->mnt_fsname, mntent->mnt_dir, mntent->mnt_type);