svn commit: trunk/busybox/util-linux

landley at busybox.net landley at busybox.net
Wed Aug 9 19:51:14 UTC 2006


Author: landley
Date: 2006-08-09 12:51:13 -0700 (Wed, 09 Aug 2006)
New Revision: 15791

Log:
Vladimir Dronnikov convinced me to twiddle the semantics of the new shared
subtree stuff to look more like http://lwn.net/Articles/159077/ thinks
they should.


Modified:
   trunk/busybox/util-linux/mount.c


Changeset:
Modified: trunk/busybox/util-linux/mount.c
===================================================================
--- trunk/busybox/util-linux/mount.c	2006-08-08 12:54:02 UTC (rev 15790)
+++ trunk/busybox/util-linux/mount.c	2006-08-09 19:51:13 UTC (rev 15791)
@@ -28,6 +28,7 @@
 // Not real flags, but we want to be able to check for this.
 #define MOUNT_NOAUTO    (1<<29)
 #define MOUNT_SWAP      (1<<30)
+
 /* Standard mount options (from -o options or --options), with corresponding
  * flags */
 
@@ -291,7 +292,7 @@
 	// Look at the file.  (Not found isn't a failure for remount, or for
 	// a synthetic filesystem like proc or sysfs.)
 
-	if (!lstat(mp->mnt_fsname, &st) && !(vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE | MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE)))
+	if (!lstat(mp->mnt_fsname, &st) && !(vfsflags & (MS_REMOUNT | MS_BIND | MS_MOVE)))
 	{
 		// Do we need to allocate a loopback device for it?
 
@@ -455,16 +456,24 @@
 		goto clean_up;
 	}
 
-	// If we have at least one argument, it's the storage location
-
-	if (optind < argc) storage_path = bb_simplify_path(argv[optind]);
-
+	// If we have a shared subtree flag, don't worry about fstab or mtab.
+	i = parse_mount_options(cmdopts,0);
+	if (ENABLE_FEATURE_MOUNT_FLAGS &&
+			(i & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE )))
+	{
+		rc = mount("", argv[optind], "", i, "");
+		if (rc) bb_perror_msg_and_die("%s", argv[optind]);
+		goto clean_up;
+	}
+	
 	// Open either fstab or mtab
 
 	if (parse_mount_options(cmdopts,0) & MS_REMOUNT)
 		fstabname = bb_path_mtab_file;
 	else fstabname="/etc/fstab";
 
+	storage_path = bb_simplify_path(argv[optind]);
+
 	if (!(fstab=setmntent(fstabname,"r")))
 		bb_perror_msg_and_die("Cannot read %s",fstabname);
 




More information about the busybox-cvs mailing list