[PATCH 1/2] documentation: split and build smount.c

From: Randy Dunlap
Date: Mon Aug 18 2008 - 00:44:57 EST


From: Randy Dunlap <randy.dunlap@xxxxxxxxxx>

Make smount.c source file and add that to Makefile so that its
build can be checked.

Signed-off-by: Randy Dunlap <randy.dunlap@xxxxxxxxxx>
cc: Miklos Szeredi <miklos@xxxxxxxxxx>
---
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@xxxxxxxxxx>
+//and modified by Ram Pai <linuxram@xxxxxxxxxx>
+// 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@xxxxxxxxxx>
- //and modified by Ram Pai <linuxram@xxxxxxxxxx>
- // 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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/