* [PATCH 1/2] documentation: split and build smount.c
@ 2008-08-18 4:44 Randy Dunlap
2008-08-18 5:04 ` Christoph Hellwig
0 siblings, 1 reply; 6+ messages in thread
From: Randy Dunlap @ 2008-08-18 4:44 UTC (permalink / raw)
To: lkml; +Cc: akpm, miklos
From: Randy Dunlap <randy.dunlap@oracle.com>
Make smount.c source file and add that to Makefile so that its
build can be checked.
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
cc: Miklos Szeredi <miklos@szeredi.hu>
---
Documentation/Makefile | 2
Documentation/filesystems/00-INDEX | 2
Documentation/filesystems/Makefile | 8 ++
Documentation/filesystems/sharedsubtree.txt | 82 +---------------------------
Documentation/filesystems/smount.c | 73 ++++++++++++++++++++++++
5 files changed, 88 insertions(+), 79 deletions(-)
--- /dev/null
+++ lin2627-rc3g4-kerndoc/Documentation/filesystems/smount.c
@@ -0,0 +1,73 @@
+//
+//this code was developed my Miklos Szeredi <miklos@szeredi.hu>
+//and modified by Ram Pai <linuxram@us.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;
+}
--- lin2627-rc3g4-kerndoc.orig/Documentation/filesystems/sharedsubtree.txt
+++ lin2627-rc3g4-kerndoc/Documentation/filesystems/sharedsubtree.txt
@@ -47,6 +47,7 @@ replicas continue to be exactly same.
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'
+ [see Documentation/filesystems/smount.c]
#mount --bind /mnt /tmp
The above command replicates the mount at /mnt to the mountpoint /tmp
@@ -141,87 +142,12 @@ replicas continue to be exactly same.
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.
+ Until then use the 'smount' program that is located in
+ "Documentation/filesystems/smount.c" and build it like:
- ------------------------------------------------------------------------
- //
- //this code was developed my Miklos Szeredi <miklos@szeredi.hu>
- //and modified by Ram Pai <linuxram@us.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:
--- lin2627-rc3g4-kerndoc.orig/Documentation/Makefile
+++ lin2627-rc3g4-kerndoc/Documentation/Makefile
@@ -1,3 +1,3 @@
obj-m := DocBook/ accounting/ auxdisplay/ connector/ \
- filesystems/configfs/ ia64/ networking/ \
+ filesystems/ filesystems/configfs/ ia64/ networking/ \
pcmcia/ spi/ video4linux/ vm/ watchdog/src/
--- /dev/null
+++ lin2627-rc3g4-kerndoc/Documentation/filesystems/Makefile
@@ -0,0 +1,8 @@
+# kbuild trick to avoid linker error. Can be omitted if a module is built.
+obj- := dummy.o
+
+# List of programs to build
+hostprogs-y := smount
+
+# Tell kbuild to always build the programs
+always := $(hostprogs-y)
--- lin2627-rc3g4-kerndoc.orig/Documentation/filesystems/00-INDEX
+++ lin2627-rc3g4-kerndoc/Documentation/filesystems/00-INDEX
@@ -92,6 +92,8 @@ sharedsubtree.txt
- a description of shared subtrees for namespaces.
smbfs.txt
- info on using filesystems with the SMB protocol (Win 3.11 and NT).
+smount.c
+ - sample source code for mounting shared subtrees
spufs.txt
- info and mount options for the SPU filesystem used on Cell.
sysfs-pci.txt
---
~Randy
Linux Plumbers Conference, 17-19 September 2008, Portland, Oregon USA
http://linuxplumbersconf.org/
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH 1/2] documentation: split and build smount.c 2008-08-18 4:44 [PATCH 1/2] documentation: split and build smount.c Randy Dunlap @ 2008-08-18 5:04 ` Christoph Hellwig 2008-08-19 1:14 ` [PATCH v2] " Randy Dunlap 0 siblings, 1 reply; 6+ messages in thread From: Christoph Hellwig @ 2008-08-18 5:04 UTC (permalink / raw) To: Randy Dunlap; +Cc: lkml, akpm, miklos On Sun, Aug 17, 2008 at 09:44:42PM -0700, Randy Dunlap wrote: > From: Randy Dunlap <randy.dunlap@oracle.com> > > Make smount.c source file and add that to Makefile so that its > build can be checked. Just remove it, and modern /bin/mount handles shared subtrees just fine > > Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> > cc: Miklos Szeredi <miklos@szeredi.hu> > --- > Documentation/Makefile | 2 > Documentation/filesystems/00-INDEX | 2 > Documentation/filesystems/Makefile | 8 ++ > Documentation/filesystems/sharedsubtree.txt | 82 +--------------------------- > Documentation/filesystems/smount.c | 73 ++++++++++++++++++++++++ > 5 files changed, 88 insertions(+), 79 deletions(-) > > --- /dev/null > +++ lin2627-rc3g4-kerndoc/Documentation/filesystems/smount.c > @@ -0,0 +1,73 @@ > +// > +//this code was developed my Miklos Szeredi <miklos@szeredi.hu> > +//and modified by Ram Pai <linuxram@us.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; > +} > --- lin2627-rc3g4-kerndoc.orig/Documentation/filesystems/sharedsubtree.txt > +++ lin2627-rc3g4-kerndoc/Documentation/filesystems/sharedsubtree.txt > @@ -47,6 +47,7 @@ replicas continue to be exactly same. > 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' > + [see Documentation/filesystems/smount.c] > > #mount --bind /mnt /tmp > The above command replicates the mount at /mnt to the mountpoint /tmp > @@ -141,87 +142,12 @@ replicas continue to be exactly same. > > 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. > + Until then use the 'smount' program that is located in > + "Documentation/filesystems/smount.c" and build it like: > > - ------------------------------------------------------------------------ > - // > - //this code was developed my Miklos Szeredi <miklos@szeredi.hu> > - //and modified by Ram Pai <linuxram@us.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: > --- lin2627-rc3g4-kerndoc.orig/Documentation/Makefile > +++ lin2627-rc3g4-kerndoc/Documentation/Makefile > @@ -1,3 +1,3 @@ > obj-m := DocBook/ accounting/ auxdisplay/ connector/ \ > - filesystems/configfs/ ia64/ networking/ \ > + filesystems/ filesystems/configfs/ ia64/ networking/ \ > pcmcia/ spi/ video4linux/ vm/ watchdog/src/ > --- /dev/null > +++ lin2627-rc3g4-kerndoc/Documentation/filesystems/Makefile > @@ -0,0 +1,8 @@ > +# kbuild trick to avoid linker error. Can be omitted if a module is built. > +obj- := dummy.o > + > +# List of programs to build > +hostprogs-y := smount > + > +# Tell kbuild to always build the programs > +always := $(hostprogs-y) > --- lin2627-rc3g4-kerndoc.orig/Documentation/filesystems/00-INDEX > +++ lin2627-rc3g4-kerndoc/Documentation/filesystems/00-INDEX > @@ -92,6 +92,8 @@ sharedsubtree.txt > - a description of shared subtrees for namespaces. > smbfs.txt > - info on using filesystems with the SMB protocol (Win 3.11 and NT). > +smount.c > + - sample source code for mounting shared subtrees > spufs.txt > - info and mount options for the SPU filesystem used on Cell. > sysfs-pci.txt > > > --- > ~Randy > Linux Plumbers Conference, 17-19 September 2008, Portland, Oregon USA > http://linuxplumbersconf.org/ > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ---end quoted text--- ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2] documentation: split and build smount.c 2008-08-18 5:04 ` Christoph Hellwig @ 2008-08-19 1:14 ` Randy Dunlap 2008-08-19 22:56 ` Karel Zak 2008-08-25 21:11 ` Miklos Szeredi 0 siblings, 2 replies; 6+ messages in thread From: Randy Dunlap @ 2008-08-19 1:14 UTC (permalink / raw) To: Christoph Hellwig; +Cc: lkml, akpm, miklos 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... ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From: Randy Dunlap <randy.dunlap@oracle.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@oracle.com> cc: Miklos Szeredi <miklos@szeredi.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@szeredi.hu> - //and modified by Ram Pai <linuxram@us.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 / \ ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2] documentation: split and build smount.c 2008-08-19 1:14 ` [PATCH v2] " Randy Dunlap @ 2008-08-19 22:56 ` Karel Zak 2008-10-28 21:26 ` Randy Dunlap 2008-08-25 21:11 ` Miklos Szeredi 1 sibling, 1 reply; 6+ messages in thread From: Karel Zak @ 2008-08-19 22:56 UTC (permalink / raw) To: Randy Dunlap; +Cc: Christoph Hellwig, lkml, akpm, miklos On Mon, Aug 18, 2008 at 06:14:09PM -0700, 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... ? > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > From: Randy Dunlap <randy.dunlap@oracle.com> > > mount(8) handles shared subtrees just fine, so remove the smount > program from Documentation/filesystems/sharedsubtree.txt. [...] > + Note: mount(8) command now supports the --make-shared flag, Right, ACK ;-) > #mount --bind /mnt /tmp BTW, people usually use a space between prompt and command, so: # mount --bind /mnt /tmp Karel -- Karel Zak <kzak@redhat.com> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2] documentation: split and build smount.c 2008-08-19 22:56 ` Karel Zak @ 2008-10-28 21:26 ` Randy Dunlap 0 siblings, 0 replies; 6+ messages in thread From: Randy Dunlap @ 2008-10-28 21:26 UTC (permalink / raw) To: Karel Zak; +Cc: Christoph Hellwig, lkml, akpm, miklos On Wed, 20 Aug 2008 00:56:25 +0200 Karel Zak wrote: > On Mon, Aug 18, 2008 at 06:14:09PM -0700, 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... ? > > > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > From: Randy Dunlap <randy.dunlap@oracle.com> > > > > mount(8) handles shared subtrees just fine, so remove the smount > > program from Documentation/filesystems/sharedsubtree.txt. > [...] > > + Note: mount(8) command now supports the --make-shared flag, > > Right, ACK ;-) > > > #mount --bind /mnt /tmp > > BTW, people usually use a space between prompt and command, so: > > # mount --bind /mnt /tmp Done for upcoming patch. Thanks. --- ~Randy ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2] documentation: split and build smount.c 2008-08-19 1:14 ` [PATCH v2] " Randy Dunlap 2008-08-19 22:56 ` Karel Zak @ 2008-08-25 21:11 ` Miklos Szeredi 1 sibling, 0 replies; 6+ messages in thread From: Miklos Szeredi @ 2008-08-25 21:11 UTC (permalink / raw) To: randy.dunlap; +Cc: hch, linux-kernel, akpm, miklos 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@oracle.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@oracle.com> > cc: Miklos Szeredi <miklos@szeredi.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@szeredi.hu> > - //and modified by Ram Pai <linuxram@us.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 > / \ > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-10-28 21:28 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2008-08-18 4:44 [PATCH 1/2] documentation: split and build smount.c Randy Dunlap 2008-08-18 5:04 ` Christoph Hellwig 2008-08-19 1:14 ` [PATCH v2] " Randy Dunlap 2008-08-19 22:56 ` Karel Zak 2008-10-28 21:26 ` Randy Dunlap 2008-08-25 21:11 ` Miklos Szeredi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome