[git commit] mount: support "nofail" option. Closes 8551

Denys Vlasenko vda.linux at googlemail.com
Wed Dec 30 19:11:34 UTC 2015


commit: http://git.busybox.net/busybox/commit/?id=911d265faf34c90158f5ba0ef81d1d558ec595e6
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
singlemount                                         1045    1060     +15
mount_option_str                                     338     345      +7
mount_it_now                                         355     361      +6
mount_options                                        172     176      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/0 up/down: 32/0)               Total: 32 bytes

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 util-linux/mount.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/util-linux/mount.c b/util-linux/mount.c
index cb40c80..c428f58 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -259,9 +259,11 @@ static struct mntent *getmntent_r(FILE* stream, struct mntent* result,
 
 // Not real flags, but we want to be able to check for this.
 enum {
-	MOUNT_USERS  = (1 << 28) * ENABLE_DESKTOP,
+	MOUNT_USERS  = (1 << 27) * ENABLE_DESKTOP,
+	MOUNT_NOFAIL = (1 << 28) * ENABLE_DESKTOP,
 	MOUNT_NOAUTO = (1 << 29),
 	MOUNT_SWAP   = (1 << 30),
+	MOUNT_FAKEFLAGS = MOUNT_USERS | MOUNT_NOFAIL | MOUNT_NOAUTO | MOUNT_SWAP
 };
 
 
@@ -326,6 +328,7 @@ static const int32_t mount_options[] = {
 		/* "swap"   */ MOUNT_SWAP,
 		IF_DESKTOP(/* "user"  */ MOUNT_USERS,)
 		IF_DESKTOP(/* "users" */ MOUNT_USERS,)
+		IF_DESKTOP(/* "nofail" */ MOUNT_NOFAIL,)
 		/* "_netdev" */ 0,
 		IF_DESKTOP(/* "comment=" */ 0,) /* systemd uses this in fstab */
 	)
@@ -385,6 +388,7 @@ static const char mount_option_str[] =
 		"swap\0"
 		IF_DESKTOP("user\0")
 		IF_DESKTOP("users\0")
+		IF_DESKTOP("nofail\0")
 		"_netdev\0"
 		IF_DESKTOP("comment=\0") /* systemd uses this in fstab */
 	)
@@ -672,6 +676,8 @@ static int mount_it_now(struct mntent *mp, unsigned long vfsflags, char *filtero
 {
 	int rc = 0;
 
+	vfsflags &= ~(unsigned long)MOUNT_FAKEFLAGS;
+
 	if (FAKE_IT) {
 		if (verbose >= 2)
 			bb_error_msg("would do mount('%s','%s','%s',0x%08lx,'%s')",
@@ -2061,6 +2067,8 @@ static int singlemount(struct mntent *mp, int ignore_busy)
 
 	if (errno == EBUSY && ignore_busy)
 		return 0;
+	if (errno == ENOENT && (vfsflags & MOUNT_NOFAIL))
+		return 0;
 	if (rc != 0)
 		bb_perror_msg("mounting %s on %s failed", mp->mnt_fsname, mp->mnt_dir);
 	return rc;


More information about the busybox-cvs mailing list