Add support for "noatime" and "nodiratime" mount flags to mount.
Change umount "-f" to mean force, and actually use umount2.
Change umount "-l" to mean "Do not free loop device".
Updates docs accordingly.
-Erik
diff --git a/umount.c b/umount.c
index ad7de2d..18a5afe 100644
--- a/umount.c
+++ b/umount.c
@@ -38,8 +38,11 @@
"\n"
#endif
"\t-r:\tTry to remount devices as read-only if mount is busy\n"
+#if defined BB_FEATURE_MOUNT_FORCE
+ "\t-f:\tForce filesystem umount (i.e. unreachable NFS server)\n"
+#endif
#if defined BB_FEATURE_MOUNT_LOOP
- "\t-f:\tDo not free loop device (if a loop device has been used)\n"
+ "\t-l:\tDo not free loop device (if a loop device has been used)\n"
#endif
;
@@ -53,6 +56,9 @@
+#if defined BB_FEATURE_MOUNT_FORCE
+static int doForce = FALSE;
+#endif
#if defined BB_FEATURE_MOUNT_LOOP
static int freeLoop = TRUE;
#endif
@@ -176,13 +182,20 @@
/* this was a loop device, delete it */
del_loop(blockDevice);
#endif
+#if defined BB_FEATURE_MOUNT_FORCE
+ if (status != 0 && doForce == TRUE) {
+ status = umount2(blockDevice, MNT_FORCE);
+ if (status != 0) {
+ fatalError("umount: forced umount of %s failed!\n", blockDevice);
+ }
+ }
+#endif
if (status != 0 && doRemount == TRUE && errno == EBUSY) {
status = mount(blockDevice, name, NULL,
MS_MGC_VAL | MS_REMOUNT | MS_RDONLY, NULL);
if (status == 0) {
fprintf(stderr, "umount: %s busy - remounted read-only\n",
blockDevice);
- /* TODO: update mtab if BB_MTAB is defined */
} else {
fprintf(stderr, "umount: Cannot remount %s read-only\n",
blockDevice);
@@ -240,7 +253,7 @@
umountAll = TRUE;
break;
#if defined BB_FEATURE_MOUNT_LOOP
- case 'f':
+ case 'l':
freeLoop = FALSE;
break;
#endif
@@ -249,6 +262,11 @@
useMtab = FALSE;
break;
#endif
+#ifdef BB_FEATURE_MOUNT_FORCE
+ case 'f':
+ doForce = TRUE;
+ break;
+#endif
case 'r':
doRemount = TRUE;
break;