svn commit: trunk/busybox/util-linux

landley at busybox.net landley at busybox.net
Thu Aug 3 17:54:45 UTC 2006


Author: landley
Date: 2006-08-03 10:54:45 -0700 (Thu, 03 Aug 2006)
New Revision: 15769

Log:
Fix umount so loop device disassociation hopefully doesn't screw up errno on
a failed mount.  And while I'm at it, legacy mdev removal was only being done
in the _failure_ case?  That can't be right.  Plus minor header cleanups
and an option parsing tweak.


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


Changeset:
Modified: trunk/busybox/util-linux/umount.c
===================================================================
--- trunk/busybox/util-linux/umount.c	2006-08-03 17:49:15 UTC (rev 15768)
+++ trunk/busybox/util-linux/umount.c	2006-08-03 17:54:45 UTC (rev 15769)
@@ -13,18 +13,15 @@
 
 #include "busybox.h"
 #include <mntent.h>
-#include <errno.h>
-#include <string.h>
 #include <getopt.h>
 
-#define OPTION_STRING		"flDnrvad"
+#define OPTION_STRING		"flDnravd"
 #define OPT_FORCE			1
 #define OPT_LAZY			2
 #define OPT_DONTFREELOOP	4
 #define OPT_NO_MTAB			8
 #define OPT_REMOUNT			16
-#define OPT_IGNORED			32	// -v is ignored
-#define OPT_ALL				(ENABLE_FEATURE_UMOUNT_ALL ? 64 : 0)
+#define OPT_ALL				(ENABLE_FEATURE_UMOUNT_ALL ? 32 : 0)
 
 int umount_main(int argc, char **argv)
 {
@@ -77,8 +74,6 @@
 		m = 0;
 		if (!argc) bb_show_usage();
 	}
-
-
 	
 	// Loop through everything we're supposed to umount, and do so.
 	for (;;) {
@@ -114,19 +109,20 @@
 						 "%s busy - remounted read-only", m->device);
 		}
 
-		/* De-allocate the loop device.  This ioctl should be ignored on any
-		 * non-loop block devices. */
-		if (ENABLE_FEATURE_MOUNT_LOOP && !(opt & OPT_DONTFREELOOP) && m)
-			del_loop(m->device);
-
 		if (curstat) {
-			/* Yes, the ENABLE is redundant here, but the optimizer for ARM
-			 * can't do simple constant propagation in local variables... */
-			if(ENABLE_FEATURE_MTAB_SUPPORT && !(opt & OPT_NO_MTAB) && m)
-				erase_mtab(m->dir);
 			status = EXIT_FAILURE;
 			bb_perror_msg("Couldn't umount %s", path);
+		} else {
+			/* De-allocate the loop device.  This ioctl should be ignored on
+			 * any non-loop block devices. */
+			if (ENABLE_FEATURE_MOUNT_LOOP && !(opt & OPT_DONTFREELOOP) && m)
+				del_loop(m->device);
+			if (ENABLE_FEATURE_MTAB_SUPPORT && !(opt & OPT_NO_MTAB) && m)
+				erase_mtab(m->dir);
 		}
+
+
+
 		// Find next matching mtab entry for -a or umount /dev
 		while (m && (m = m->next))
 			if ((opt & OPT_ALL) || !strcmp(path,m->device))




More information about the busybox-cvs mailing list