Skip to contentSkip to conversation

bug with multiple mounts of filesystems in 2.6

DISCUSSION John S J Anderson 4 participants 7 messages Jul 26, 2004 – Jul 27, 2004

lore
Share & tools
lore
#0 lore raw

Hi --

We're working on migrating to the 2.6 kernel series, and one big problem has popped up: we have a number of NFS mounts that are mounted read-only in one location and read-write in a distinct location (on the same machine). With 2.4 series kernels, this worked without issue, but with 2.6, it doesn't: it's not possible to mount the same filesystem twice with different options for each mount; the two mount points have to share the same mount options.

Furthermore, if you do mount one filesystem at two different places, changing the mount options on one mount point ('mount -o remount,rw $MOUNT1', for example) also results in the mount options on the other mount point being changed. Finally, the information returned by 'mount' about the mount points is wrong -- 'mount' will show (for example) one mount point being 'rw' and the other being 'ro', when in fact attempting to use the 'rw' mount point will show it to be read-only. /proc/mounts correctly indicates that both mounts are read-only.

Further experimentation has shown:

* the NFS layer is not involved; it is possible to reproduce this problem using just locally-attached filesystems.
* this affects at least 2.6.3, 2.6.5, and 2.6.7.
* it happens with mount version 2.11r and 2.12.

Because the options of the first mount point "wins" (i.e., mounting a filesystem once read-write, and then a second time as read-only, leaves both mounts in a read-write state), it seems like there's some sort of caching optimization going on -- but I haven't looked into the code to find out if that guess is correct.

Any pointers towards restoring the 2.4 behavior welcomed.

thanks,
john.

Signature · 3 lines
Perhaps you have forgotten that this is an engineering discipline, not
some sort of black magic.
  Mark Jason Dominus's Good Advice #11946
#1 lore raw

På må , 26/07/2004 klokka 12:29, skreiv John S J Anderson:

Quoted 9 lines

Hi --

We're working on migrating to the 2.6 kernel series, and one big problem has popped up: we have a number of NFS mounts that are mounted read-only in one location and read-write in a distinct location (on the same machine). With 2.4 series kernels, this worked without issue, but with 2.6, it doesn't: it's not possible to mount the same filesystem twice with different options for each mount; the two mount points have to share the same mount options.

That behaviour is no longer supported as it meant that you would have different superblocks (and hence different out-of-sync caches) between the 2 mountpoint. It is in any case not a behaviour that is supported on any other Linux filesystems.

If you want readonly to be an exception, then you will have to move the MS_RDONLY flag from being a superblock option to being a vfsmount option, then propagate that vfsmount information down to all the tests of IS_RDONLY(inode). Not a trivial task, and not one that looms high on my list of priorities...

Cheers,
Trond

#2 lore raw

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Quoted 13 lines · Trond Myklebust

På må , 26/07/2004 klokka 12:29, skreiv John S J Anderson:

Quoted 9 lines

Hi --

We're working on migrating to the 2.6 kernel series, and one big problem has popped up: we have a number of NFS mounts that are mounted read-only in one location and read-write in a distinct location (on the same machine). With 2.4 series kernels, this worked without issue, but with 2.6, it doesn't: it's not possible to mount the same filesystem twice with different options for each mount; the two mount points have to share the same mount options.

Quoted 5 lines

That behaviour is no longer supported as it meant that you would have different superblocks (and hence different out-of-sync caches) between the 2 mountpoint. It is in any case not a behaviour that is supported on any other Linux filesystems.

How is this any different than having two seperate nfs clients accessing the same nfs export?

Quoted 6 lines

If you want readonly to be an exception, then you will have to move the MS_RDONLY flag from being a superblock option to being a vfsmount option, then propagate that vfsmount information down to all the tests of IS_RDONLY(inode). Not a trivial task, and not one that looms high on my list of priorities...

What ever happened to the bind ro patches that were floating around a couple months ago?
(http://marc.theaimsgroup.com/?t=107932320200005&r=1&w=2)

What is left in getting this done? Just the touch_file bit Viro commented on?

- --
Mike Waychison
Sun Microsystems, Inc.
1 (650) 352-5299 voice
1 (416) 202-8336 voice
http://www.sun.com

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NOTICE: The opinions expressed in this email are held by me, and may not represent the views of Sun Microsystems, Inc.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD4DBQFBBXiTdQs4kOxk3/MRAp2CAJ9hLA43GX7breEAuFJp++noSX7hAQCYn7yw FXXelAMC/NCetjqwC8Q67g==
=rQRx
-----END PGP SIGNATURE-----

#3 lore raw
Quoted 30 lines · Mike Waychison

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Quoted 12 lines · Trond Myklebust

På må , 26/07/2004 klokka 12:29, skreiv John S J Anderson:

Quoted 9 lines

Hi --

We're working on migrating to the 2.6 kernel series, and one big problem has popped up: we have a number of NFS mounts that are mounted read-only in one location and read-write in a distinct location (on the same machine). With 2.4 series kernels, this worked without issue, but with 2.6, it doesn't: it's not possible to mount the same filesystem twice with different options for each mount; the two mount points have to share the same mount options.

Quoted 4 lines

That behaviour is no longer supported as it meant that you would have different superblocks (and hence different out-of-sync caches) between the 2 mountpoint. It is in any case not a behaviour that is supported on any other Linux filesystems.

How is this any different than having two seperate nfs clients accessing the same nfs export?

Quoted 5 lines

If you want readonly to be an exception, then you will have to move the MS_RDONLY flag from being a superblock option to being a vfsmount option, then propagate that vfsmount information down to all the tests of IS_RDONLY(inode). Not a trivial task, and not one that looms high on my list of priorities...

Quoted 6 lines

What ever happened to the bind ro patches that were floating around a couple months ago?
(http://marc.theaimsgroup.com/?t=107932320200005&r=1&w=2)

What is left in getting this done? Just the touch_file bit Viro commented on?

started with the noatime/nodiratime stuff for inclusion but that patch was neither commented nor included, so I put it on hold ... currently I'm planning to update this for 2.6.8 ... we'll see ...

best,
Herbert

Quoted 18 lines

- --
Mike Waychison
Sun Microsystems, Inc.
1 (650) 352-5299 voice
1 (416) 202-8336 voice
http://www.sun.com

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NOTICE: The opinions expressed in this email are held by me, and may not represent the views of Sun Microsystems, Inc.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD4DBQFBBXiTdQs4kOxk3/MRAp2CAJ9hLA43GX7breEAuFJp++noSX7hAQCYn7yw FXXelAMC/NCetjqwC8Q67g==
=rQRx
-----END PGP SIGNATURE-----

#4 lore raw
In reply to Mike Waychison

På må , 26/07/2004 klokka 17:33, skreiv Mike Waychison:

Quoted 2 lines

How is this any different than having two seperate nfs clients accessing the same nfs export?

It isn't, but why do you think that should be a reason for allowing it?

By all means feel free to add "mount --bind -oro" capabilities, but it is neither useful nor is it necessary to break the NFS caching model in order to do so.

Cheers,
Trond

#5 lore raw

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Quoted 7 lines · Trond Myklebust

På må , 26/07/2004 klokka 17:33, skreiv Mike Waychison:

Quoted 2 lines

How is this any different than having two seperate nfs clients accessing the same nfs export?

Quoted 6 lines

It isn't, but why do you think that should be a reason for allowing it?

By all means feel free to add "mount --bind -oro" capabilities, but it is neither useful nor is it necessary to break the NFS caching model in order to do so.

Agreed. The two problems are orthogonal. [1]

As an example where sharing the super_block is wrong (albeit probably just an oversight) is that the protocols (udp vs tcp) are not compared in nfs_compare_super. You could argue that the client fhandles should be different though, I'm not sure..

Another 'bind mount extension' that would be nice to change at the vfsmount level may be w/rsize, but that is probably a very intrusive change for nfs and probably not possible. Thoughts?

[1] - I haven't tested mounting nfs ro, and then mounting nfs rw using the bind extensions. Does nfs make any assumptions about the mount being ro?

- --
Mike Waychison
Sun Microsystems, Inc.
1 (650) 352-5299 voice
1 (416) 202-8336 voice
http://www.sun.com

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NOTICE: The opinions expressed in this email are held by me, and may not represent the views of Sun Microsystems, Inc.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFBBahXdQs4kOxk3/MRAhTCAKCJGOaemEdeDrmtp/tG5Y6fHe+BTgCgkh8v 312wdekZsxms1ShJciogYRQ=
=7Hm7
-----END PGP SIGNATURE-----

#6 lore raw

På må , 26/07/2004 klokka 20:56, skreiv Mike Waychison:

Quoted 4 lines

As an example where sharing the super_block is wrong (albeit probably just an oversight) is that the protocols (udp vs tcp) are not compared in nfs_compare_super. You could argue that the client fhandles should be different though, I'm not sure..

Not an oversight. It's just that we don't really have a model for trunking a single cache over several different RPC connections. Basically, it all boils down to the problem that inodes and dentries have no idea of which namespace you used to access them, and hence even if you did have space in the vfsmount in which to store an rpc_client struct and perhaps rsize/wsize ... you still have a reconstruction job to do.

Quoted 3 lines

Another 'bind mount extension' that would be nice to change at the vfsmount level may be w/rsize, but that is probably a very intrusive change for nfs and probably not possible. Thoughts?

The "struct nfs_open_context" I introduce in the latest NFS4_ALL patches could probably be modified to include vfsmount information.

My question is why do people need to do this? What problems does it solve?
Normally, rsize/wsize are per-server parameters. Their optimal value depends above all upon the quality of the network link between client and server. Ditto for the choice of UDP vs TCP: why would you want to choose to use both options against a given server?

Quoted 3 lines

[1] - I haven't tested mounting nfs ro, and then mounting nfs rw using the bind extensions. Does nfs make any assumptions about the mount being ro?

Nope, however the VFS support for this is missing. That was part of what Herbert was doing in his patches.

Cheers,
Trond