diff options
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/mount.c | 32 | ||||
-rw-r--r-- | util-linux/umount.c | 24 |
2 files changed, 40 insertions, 16 deletions
diff --git a/util-linux/mount.c b/util-linux/mount.c index 456e45235..00a774a53 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -66,26 +66,28 @@ extern const char mtab_file[]; /* Defined in utility.c */ static const char mount_usage[] = "\tmount [flags]\n" "\tmount [flags] device directory [-o options,more-options]\n" - "\n" "Flags:\n" "\t-a:\tMount all file systems in fstab.\n" + "\n" "Flags:\n" + "\t-a:\t\tMount all file systems in fstab.\n" #ifdef BB_MTAB - "\t-f:\t\"Fake\" mount. Add entry to mount table but don't mount it.\n" - "\t-n:\tDon't write a mount table entry.\n" + "\t-f:\t\t\"Fake\" mount. Add entry to mount table but don't mount it.\n" + "\t-n:\t\tDon't write a mount table entry.\n" #endif "\t-o option:\tOne of many filesystem options, listed below.\n" - "\t-r:\tMount the filesystem read-only.\n" - "\t-t filesystem-type:\tSpecify the filesystem type.\n" - "\t-w:\tMount for reading and writing (default).\n" + "\t-r:\t\tMount the filesystem read-only.\n" + "\t-t fs-type:\tSpecify the filesystem type.\n" + "\t-w:\t\tMount for reading and writing (default).\n" "\n" "Options for use with the \"-o\" flag:\n" - "\tasync / sync:\tWrites are asynchronous / synchronous.\n" - "\tdev / nodev:\tAllow use of special device files / disallow them.\n" - "\texec / noexec:\tAllow use of executable files / disallow them.\n" + "\tasync/sync:\tWrites are asynchronous / synchronous.\n" + "\tatime/noatime:\tEnable / disable updates to inode access times.\n" + "\tdev/nodev:\tAllow use of special device files / disallow them.\n" + "\texec/noexec:\tAllow use of executable files / disallow them.\n" #if defined BB_FEATURE_MOUNT_LOOP - "\tloop: Mounts a file via loop device.\n" + "\tloop:\t\tMounts a file via loop device.\n" #endif - "\tsuid / nosuid:\tAllow set-user-id-root programs / disallow them.\n" - "\tremount: Re-mount a currently-mounted filesystem, changing its flags.\n" - "\tro / rw: Mount for read-only / read-write.\n" + "\tsuid/nosuid:\tAllow set-user-id-root programs / disallow them.\n" + "\tremount:\tRe-mount a currently-mounted filesystem, changing its flags.\n" + "\tro/rw:\t\tMount for read-only / read-write.\n" "There are EVEN MORE flags that are specific to each filesystem.\n" "You'll have to see the written documentation for those.\n"; @@ -98,10 +100,14 @@ struct mount_options { static const struct mount_options mount_options[] = { {"async", ~MS_SYNCHRONOUS, 0}, + {"atime", ~0, ~MS_NOATIME}, {"defaults", ~0, 0}, {"dev", ~MS_NODEV, 0}, + {"diratime", ~0, ~MS_NODIRATIME}, {"exec", ~MS_NOEXEC, 0}, + {"noatime", ~0, MS_NOATIME}, {"nodev", ~0, MS_NODEV}, + {"nodiratime", ~0, MS_NODIRATIME}, {"noexec", ~0, MS_NOEXEC}, {"nosuid", ~0, MS_NOSUID}, {"remount", ~0, MS_REMOUNT}, diff --git a/util-linux/umount.c b/util-linux/umount.c index ad7de2d20..18a5afe80 100644 --- a/util-linux/umount.c +++ b/util-linux/umount.c @@ -38,8 +38,11 @@ static const char umount_usage[] = "\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 @@ static struct _mtab_entry_t *mtab_cache = NULL; +#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 @@ static int do_umount(const char *name, int useMtab) /* 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 @@ extern int umount_main(int argc, char **argv) umountAll = TRUE; break; #if defined BB_FEATURE_MOUNT_LOOP - case 'f': + case 'l': freeLoop = FALSE; break; #endif @@ -249,6 +262,11 @@ extern int umount_main(int argc, char **argv) useMtab = FALSE; break; #endif +#ifdef BB_FEATURE_MOUNT_FORCE + case 'f': + doForce = TRUE; + break; +#endif case 'r': doRemount = TRUE; break; |