From 6c5f2c602174c7fe0830a1fc4fe5b3dde5ed7068 Mon Sep 17 00:00:00 2001 From: Erik Andersen Date: Fri, 5 May 2000 19:49:33 +0000 Subject: 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 --- util-linux/mount.c | 32 +++++++++++++++++++------------- util-linux/umount.c | 24 +++++++++++++++++++++--- 2 files changed, 40 insertions(+), 16 deletions(-) (limited to 'util-linux') 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 @@ -175,6 +181,14 @@ static int do_umount(const char *name, int useMtab) if (freeLoop == TRUE && blockDevice != NULL && !strncmp("/dev/loop", blockDevice, 9)) /* 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, @@ -182,7 +196,6 @@ static int do_umount(const char *name, int useMtab) 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 @@ -248,6 +261,11 @@ extern int umount_main(int argc, char **argv) case 'n': useMtab = FALSE; break; +#endif +#ifdef BB_FEATURE_MOUNT_FORCE + case 'f': + doForce = TRUE; + break; #endif case 'r': doRemount = TRUE; -- cgit v1.2.3