[PATCH] mount: support -i; pass through -f and -n to helpers as necessary

Colin Watson cjwatson at ubuntu.com
Fri Jun 19 00:09:26 UTC 2009


When FEATURE_MOUNT_HELPERS is enabled, mount should support the -i
option, which prevents calling the helper function. This is used by
FUSE: it installs fusermount as a helper, and if it's configured to
update /etc/mtab then it does so by calling 'mount -i -f' (i.e. don't
call helper, fake the system call, but do update mtab). I believe this
is a fairly standard thing for mount helpers to want to do (why should
they include code to update mtab when mount can do it for them?) and so
I think it's worth supporting by default when mount helpers are enabled.

mount also ought to pass through the -f and -n options to helpers as
necessary, since they may reasonably want to attempt to handle them.
util-linux mount does this.

Zero bloatcheck impact with defconfig. With FEATURE_MOUNT_HELPERS
additionally enabled:

function                                             old     new   delta
mount_it_now                                         293     332     +39
packed_usage                                       25845   25863     +18
.rodata                                           125771  125789     +18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 75/0)               Total: 75 bytes

Signed-off-by: Colin Watson <cjwatson at ubuntu.com>
---
 include/usage.h    |    3 +++
 util-linux/mount.c |   14 ++++++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/include/usage.h b/include/usage.h
index 0f6378e..75f3e86 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -2901,6 +2901,9 @@
      "\n	-f		Dry run" \
 	) \
 	) \
+	IF_FEATURE_MOUNT_HELPERS( \
+     "\n	-i		Don't call mount helper" \
+	) \
 	IF_FEATURE_MTAB_SUPPORT( \
      "\n	-n		Don't update /etc/mtab" \
 	) \
diff --git a/util-linux/mount.c b/util-linux/mount.c
index ab24964..274e6bb 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -90,6 +90,12 @@ enum {
 #define fakeIt 0
 #endif
 
+#if ENABLE_FEATURE_MOUNT_HELPERS
+#define externalAllowed (!(option_mask32 & OPT_i))
+#else
+#define externalAllowed 0
+#endif
+
 
 // TODO: more "user" flag compatibility.
 // "user" option (from mount manpage):
@@ -414,11 +420,15 @@ static int mount_it_now(struct mntent *mp, long vfsflags, char *filteropts)
 
 		// If mount failed, try
 		// helper program mount.<mnt_type>
-		if (ENABLE_FEATURE_MOUNT_HELPERS && rc) {
-			char *args[6];
+		if (externalAllowed && rc) {
+			char *args[8];
 			int errno_save = errno;
 			args[0] = xasprintf("mount.%s", mp->mnt_type);
 			rc = 1;
+			if (fakeIt)
+				args[rc++] = (char *)"-f";
+			if (ENABLE_FEATURE_MTAB_SUPPORT && !useMtab)
+				args[rc++] = (char *)"-n";
 			args[rc++] = mp->mnt_fsname;
 			args[rc++] = mp->mnt_dir;
 			if (filteropts) {
-- 
1.6.3.1



More information about the busybox mailing list