lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <E1KXjLj-0001FB-2h@pomaz-ex.szeredi.hu>
Date:	Mon, 25 Aug 2008 23:11:43 +0200
From:	Miklos Szeredi <miklos@...redi.hu>
To:	randy.dunlap@...cle.com
CC:	hch@...radead.org, linux-kernel@...r.kernel.org,
	akpm@...ux-foundation.org, miklos@...redi.hu
Subject: Re: [PATCH v2] documentation: split and build smount.c

On Mon, 18 Aug 2008, Randy Dunlap wrote:
> On Mon, 18 Aug 2008 01:04:31 -0400 Christoph Hellwig wrote:
> 
> > Just remove it, and modern /bin/mount handles shared subtrees just fine
> 
> Miklos... ?

Yes, ACK from me too.  Thanks Randy!

Miklos

> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> From: Randy Dunlap <randy.dunlap@...cle.com>
> 
> mount(8) handles shared subtrees just fine, so remove the smount
> program from Documentation/filesystems/sharedsubtree.txt.
> 
> Fix annoying "Lets" -> "Let's".
> 
> Signed-off-by: Randy Dunlap <randy.dunlap@...cle.com>
> cc: Miklos Szeredi <miklos@...redi.hu>
> ---
>  Documentation/filesystems/sharedsubtree.txt |  192 +++-------------------------
>  1 file changed, 25 insertions(+), 167 deletions(-)
> 
> --- lin2627-rc3g4-kerndoc.orig/Documentation/filesystems/sharedsubtree.txt
> +++ lin2627-rc3g4-kerndoc/Documentation/filesystems/sharedsubtree.txt
> @@ -41,12 +41,11 @@ replicas continue to be exactly same.
>  
>  	Here is an example:
>  
> -	Lets say /mnt has a mount that is shared.
> +	Let's say /mnt has a mount that is shared.
>  	mount --make-shared /mnt
>  
> -	note: mount command does not yet support the --make-shared flag.
> -	I have included a small C program which does the same by executing
> -	'smount /mnt shared'
> +	Note: mount(8) command now supports the --make-shared flag,
> +	so the sample 'smount' program is no longer needed.
>  
>  	#mount --bind /mnt /tmp
>  	The above command replicates the mount at /mnt to the mountpoint /tmp
> @@ -58,7 +57,7 @@ replicas continue to be exactly same.
>  	#ls /tmp
>  	a b c
>  
> -	Now lets say we mount a device at /tmp/a
> +	Now let's say we mount a device at /tmp/a
>  	#mount /dev/sd0  /tmp/a
>  
>  	#ls /tmp/a
> @@ -80,20 +79,19 @@ replicas continue to be exactly same.
>  
>  	Here is an example:
>  
> -	Lets say /mnt has a mount which is shared.
> +	Let's say /mnt has a mount which is shared.
>  	#mount --make-shared /mnt
>  
> -	Lets bind mount /mnt to /tmp
> +	Let's bind mount /mnt to /tmp
>  	#mount --bind /mnt /tmp
>  
>  	the new mount at /tmp becomes a shared mount and it is a replica of
>  	the mount at /mnt.
>  
> -	Now lets make the mount at /tmp; a slave of /mnt
> +	Now let's make the mount at /tmp; a slave of /mnt
>  	#mount --make-slave /tmp
> -	[or smount /tmp slave]
>  
> -	lets mount /dev/sd0 on /mnt/a
> +	let's mount /dev/sd0 on /mnt/a
>  	#mount /dev/sd0 /mnt/a
>  
>  	#ls /mnt/a
> @@ -104,7 +102,7 @@ replicas continue to be exactly same.
>  
>  	Note the mount event has propagated to the mount at /tmp
>  
> -	However lets see what happens if we mount something on the mount at /tmp
> +	However let's see what happens if we mount something on the mount at /tmp
>  
>  	#mount /dev/sd1 /tmp/b
>  
> @@ -124,12 +122,11 @@ replicas continue to be exactly same.
>  
>  2d) A unbindable mount is a unbindable private mount
>  
> -	lets say we have a mount at /mnt and we make is unbindable
> +	let's say we have a mount at /mnt and we make is unbindable
>  
>  	#mount --make-unbindable /mnt
> -	 [ smount /mnt  unbindable ]
>  
> -	 Lets try to bind mount this mount somewhere else.
> +	 Let's try to bind mount this mount somewhere else.
>  	 # mount --bind /mnt /tmp
>  	 mount: wrong fs type, bad option, bad superblock on /mnt,
>  	        or too many mounted file systems
> @@ -139,147 +136,8 @@ replicas continue to be exactly same.
>  
>  3) smount command
>  
> -	Currently the mount command is not aware of shared subtree features.
> -	Work is in progress to add the support in mount ( util-linux package ).
> -	Till then use the following program.
> -
> -	------------------------------------------------------------------------
> -	//
> -	//this code was developed my Miklos Szeredi <miklos@...redi.hu>
> -	//and modified by Ram Pai <linuxram@...ibm.com>
> -	// sample usage:
> -	//              smount /tmp shared
> -	//
> -	#include <stdio.h>
> -	#include <stdlib.h>
> -	#include <unistd.h>
> -	#include <string.h>
> -	#include <sys/mount.h>
> -	#include <sys/fsuid.h>
> -
> -	#ifndef MS_REC
> -	#define MS_REC		0x4000	/* 16384: Recursive loopback */
> -	#endif
> -
> -	#ifndef MS_SHARED
> -	#define MS_SHARED		1<<20	/* Shared */
> -	#endif
> -
> -	#ifndef MS_PRIVATE
> -	#define MS_PRIVATE		1<<18	/* Private */
> -	#endif
> -
> -	#ifndef MS_SLAVE
> -	#define MS_SLAVE		1<<19	/* Slave */
> -	#endif
> -
> -	#ifndef MS_UNBINDABLE
> -	#define MS_UNBINDABLE		1<<17	/* Unbindable */
> -	#endif
> -
> -	int main(int argc, char *argv[])
> -	{
> -		int type;
> -		if(argc != 3) {
> -			fprintf(stderr, "usage: %s dir "
> -			"<rshared|rslave|rprivate|runbindable|shared|slave"
> -			"|private|unbindable>\n" , argv[0]);
> -			return 1;
> -		}
> -
> -		fprintf(stdout, "%s %s %s\n", argv[0], argv[1], argv[2]);
> -
> -		if (strcmp(argv[2],"rshared")==0)
> -			type=(MS_SHARED|MS_REC);
> -		else if (strcmp(argv[2],"rslave")==0)
> -			type=(MS_SLAVE|MS_REC);
> -		else if (strcmp(argv[2],"rprivate")==0)
> -			type=(MS_PRIVATE|MS_REC);
> -		else if (strcmp(argv[2],"runbindable")==0)
> -			type=(MS_UNBINDABLE|MS_REC);
> -		else if (strcmp(argv[2],"shared")==0)
> -			type=MS_SHARED;
> -		else if (strcmp(argv[2],"slave")==0)
> -			type=MS_SLAVE;
> -		else if (strcmp(argv[2],"private")==0)
> -			type=MS_PRIVATE;
> -		else if (strcmp(argv[2],"unbindable")==0)
> -			type=MS_UNBINDABLE;
> -		else {
> -			fprintf(stderr, "invalid operation: %s\n", argv[2]);
> -			return 1;
> -		}
> -		setfsuid(getuid());
> -
> -		if(mount("", argv[1], "dontcare", type, "") == -1) {
> -			perror("mount");
> -			return 1;
> -		}
> -		return 0;
> -	}
> -	-----------------------------------------------------------------------
> -
> -	Copy the above code snippet into smount.c
> -	gcc -o smount smount.c
> -
> -
> -	(i) To mark all the mounts under /mnt as shared execute the following
> -	command:
> -
> -	 	smount /mnt rshared
> -		the corresponding syntax planned for mount command is
> -		mount --make-rshared /mnt
> -
> -	    just to mark a mount /mnt as shared, execute the following
> -	    command:
> -	 	smount /mnt shared
> -		the corresponding syntax planned for mount command is
> -		mount --make-shared /mnt
> -
> -	(ii) To mark all the shared mounts under /mnt as slave execute the
> -	following
> -
> -	     command:
> -		smount /mnt rslave
> -		the corresponding syntax planned for mount command is
> -		mount --make-rslave /mnt
> -
> -	    just to mark a mount /mnt as slave, execute the following
> -	    command:
> -	 	smount /mnt slave
> -		the corresponding syntax planned for mount command is
> -		mount --make-slave /mnt
> -
> -	(iii) To mark all the mounts under /mnt as private execute the
> -	following command:
> -
> -		smount /mnt rprivate
> -		the corresponding syntax planned for mount command is
> -		mount --make-rprivate /mnt
> -
> -	    just to mark a mount /mnt as private, execute the following
> -	    command:
> -	 	smount /mnt private
> -		the corresponding syntax planned for mount command is
> -		mount --make-private /mnt
> -
> -	      NOTE: by default all the mounts are created as private. But if
> -	      you want to change some shared/slave/unbindable  mount as
> -	      private at a later point in time, this command can help.
> -
> -	(iv) To mark all the mounts under /mnt as unbindable execute the
> -	following
> -
> -	     command:
> -		smount /mnt runbindable
> -		the corresponding syntax planned for mount command is
> -		mount --make-runbindable /mnt
> -
> -	    just to mark a mount /mnt as unbindable, execute the following
> -	    command:
> -	 	smount /mnt unbindable
> -		the corresponding syntax planned for mount command is
> -		mount --make-unbindable /mnt
> +	Modern mount(8) command is aware of shared subtree features,
> +	so use it instead of the 'smount' command. [source code removed]
>  
>  
>  4) Use cases
> @@ -558,7 +416,7 @@ replicas continue to be exactly same.
>  	then the subtree under the unbindable mount is pruned in the new
>  	location.
>  
> -	eg: lets say we have the following mount tree.
> +	eg: let's say we have the following mount tree.
>  
>  		A
>  	      /   \
> @@ -566,7 +424,7 @@ replicas continue to be exactly same.
>  	     / \ / \
>  	     D E F G
>  
> -	     Lets say all the mount except the mount C in the tree are
> +	     Let's say all the mount except the mount C in the tree are
>  	     of a type other than unbindable.
>  
>  	     If this tree is rbound to say Z
> @@ -683,13 +541,13 @@ replicas continue to be exactly same.
>  	'b' on mounts that receive propagation from mount 'B' and does not have
>  	sub-mounts within them are unmounted.
>  
> -	Example: Lets say 'B1', 'B2', 'B3' are shared mounts that propagate to
> +	Example: Let's say 'B1', 'B2', 'B3' are shared mounts that propagate to
>  	each other.
>  
> -	lets say 'A1', 'A2', 'A3' are first mounted at dentry 'b' on mount
> +	let's say 'A1', 'A2', 'A3' are first mounted at dentry 'b' on mount
>  	'B1', 'B2' and 'B3' respectively.
>  
> -	lets say 'C1', 'C2', 'C3' are next mounted at the same dentry 'b' on
> +	let's say 'C1', 'C2', 'C3' are next mounted at the same dentry 'b' on
>  	mount 'B1', 'B2' and 'B3' respectively.
>  
>  	if 'C1' is unmounted, all the mounts that are most-recently-mounted on
> @@ -710,7 +568,7 @@ replicas continue to be exactly same.
>  	A cloned namespace contains all the mounts as that of the parent
>  	namespace.
>  
> -	Lets say 'A' and 'B' are the corresponding mounts in the parent and the
> +	Let's say 'A' and 'B' are the corresponding mounts in the parent and the
>  	child namespace.
>  
>  	If 'A' is shared, then 'B' is also shared and 'A' and 'B' propagate to
> @@ -759,11 +617,11 @@ replicas continue to be exactly same.
>  		mount --make-slave /mnt
>  
>  		At this point we have the first mount at /tmp and
> -		its root dentry is 1. Lets call this mount 'A'
> +		its root dentry is 1. Let's call this mount 'A'
>  		And then we have a second mount at /tmp1 with root
> -		dentry 2. Lets call this mount 'B'
> +		dentry 2. Let's call this mount 'B'
>  		Next we have a third mount at /mnt with root dentry
> -		mnt. Lets call this mount 'C'
> +		mnt. Let's call this mount 'C'
>  
>  		'B' is the slave of 'A' and 'C' is a slave of 'B'
>  		A -> B -> C
> @@ -794,7 +652,7 @@ replicas continue to be exactly same.
>  
>  	Q3 Why is unbindable mount needed?
>  
> -		Lets say we want to replicate the mount tree at multiple
> +		Let's say we want to replicate the mount tree at multiple
>  		locations within the same subtree.
>  
>  		if one rbind mounts a tree within the same subtree 'n' times
> @@ -803,7 +661,7 @@ replicas continue to be exactly same.
>  		mounts. Here is a example.
>  
>  		step 1:
> -		   lets say the root tree has just two directories with
> +		   let's say the root tree has just two directories with
>  		   one vfsmount.
>  				    root
>  				   /    \
> @@ -875,7 +733,7 @@ replicas continue to be exactly same.
>  		Unclonable mounts come in handy here.
>  
>  		step 1:
> -		   lets say the root tree has just two directories with
> +		   let's say the root tree has just two directories with
>  		   one vfsmount.
>  				    root
>  				   /    \
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ