[lxc-devel] Fixed (hacked) LXC to apply mount options for bind mounts
Ciprian Dorin, Craciun
ciprian.craciun at gmail.com
Mon Mar 8 21:41:20 UTC 2010
On Mon, Mar 8, 2010 at 11:35 PM, Ciprian Dorin, Craciun
<ciprian.craciun at gmail.com> wrote:
> Hello all!
>
> This bug stalked me for a while, but only now it bit me quite
> badly... (Lost about an hour of work...)
>
> So the culprit: inside the fstab file for the `lxc.mount` option I
> can use options like `ro` together with `bind`. Unfortunately the
> kernel just laughs in my face and ignores any options I've put in
> there... :) But not any more: I've updated `./src/lxc/conf.c`
> (`mount_file_entries` function) so that when it encounters a `bind`
> option it executes it twice (one without any extra options, and a
> second time with the remount flag set.)
>
> I've marginally (as in my particular case) tested it and it works.
>
> Any other ideas on how to solve this? Any comments?
> Ciprian.
>
> P.S.: One question though (both in the patched and unpatched
> versions): it seems that if I put two lines inside the fstab, once
> with only `bind` options, and a second one with `remount,ro` option it
> doesn't work and I receive the error `No such device - failed to
> mount`. But this is equivalent with what my patched version is doing
> (which works)... Strange...
>
>
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index 26ddd03..f7c5816 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -801,11 +801,20 @@ 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);
Forgot to montion that my changeset is also available on Gitorious:
clone-URL
git://gitorious.org/~ciprian.craciun/lxc/ciprian-craciun-patches.git
branch: patches/bind-remount
Or view on-line:
http://gitorious.org/~ciprian.craciun/lxc/ciprian-craciun-patches/commits/patches/bind-remount
Ciprian.
More information about the lxc-devel
mailing list