summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog2
-rw-r--r--mount.c3
-rw-r--r--umount.c15
-rw-r--r--util-linux/mount.c3
-rw-r--r--util-linux/umount.c15
5 files changed, 32 insertions, 6 deletions
diff --git a/Changelog b/Changelog
index 5678f60..c6493f8 100644
--- a/Changelog
+++ b/Changelog
@@ -45,6 +45,8 @@
* Fixed a bug where "sed 's/foo/bar/g'" (i.e. a script w/o a "-e")
* ps now supports BB_FEATURE_AUTOWIDTH, and can adjust its width
to match the terminal (defaults to width=79 when this is off).
+ * Fixed mount'ing loop devices when the filesystem type was not
+ specified. It used to revert to non-loop after the first try.
-Erik Andersen
diff --git a/mount.c b/mount.c
index c29be51..336cff7 100644
--- a/mount.c
+++ b/mount.c
@@ -142,7 +142,6 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
fprintf(stderr, "WARNING: loop device is read-only\n");
flags &= ~MS_RDONLY;
}
- use_loop = FALSE;
}
#endif
status =
@@ -415,10 +414,10 @@ extern int mount_main(int argc, char **argv)
case 'a':
all = TRUE;
break;
-#ifdef BB_MTAB
case 'f':
fakeIt = TRUE;
break;
+#ifdef BB_MTAB
case 'n':
useMtab = FALSE;
break;
diff --git a/umount.c b/umount.c
index 0f087e1..b0f393c 100644
--- a/umount.c
+++ b/umount.c
@@ -41,6 +41,9 @@ static const char umount_usage[] =
#ifdef BB_FEATURE_REMOUNT
"\t-r:\tTry to remount devices as read-only if mount is busy\n"
#endif
+#if defined BB_FEATURE_MOUNT_LOOP
+ "\t-f:\tDo not free loop device (if a loop device has been used)\n"
+#endif
;
struct _mtab_entry_t {
@@ -53,9 +56,14 @@ static struct _mtab_entry_t *mtab_cache = NULL;
+#if defined BB_FEATURE_MOUNT_LOOP
+static int freeLoop = TRUE;
+#endif
static int useMtab = TRUE;
static int umountAll = FALSE;
+#if defined BB_FEATURE_REMOUNT
static int doRemount = FALSE;
+#endif
extern const char mtab_file[]; /* Defined in utility.c */
@@ -167,7 +175,7 @@ static int do_umount(const char *name, int useMtab)
status = umount(name);
#if defined BB_FEATURE_MOUNT_LOOP
- if (blockDevice != NULL && !strncmp("/dev/loop", blockDevice, 9))
+ if (freeLoop == TRUE && blockDevice != NULL && !strncmp("/dev/loop", blockDevice, 9))
/* this was a loop device, delete it */
del_loop(blockDevice);
#endif
@@ -236,6 +244,11 @@ extern int umount_main(int argc, char **argv)
case 'a':
umountAll = TRUE;
break;
+#if defined BB_FEATURE_MOUNT_LOOP
+ case 'f':
+ freeLoop = FALSE;
+ break;
+#endif
#ifdef BB_MTAB
case 'n':
useMtab = FALSE;
diff --git a/util-linux/mount.c b/util-linux/mount.c
index c29be51..336cff7 100644
--- a/util-linux/mount.c
+++ b/util-linux/mount.c
@@ -142,7 +142,6 @@ do_mount(char *specialfile, char *dir, char *filesystemtype,
fprintf(stderr, "WARNING: loop device is read-only\n");
flags &= ~MS_RDONLY;
}
- use_loop = FALSE;
}
#endif
status =
@@ -415,10 +414,10 @@ extern int mount_main(int argc, char **argv)
case 'a':
all = TRUE;
break;
-#ifdef BB_MTAB
case 'f':
fakeIt = TRUE;
break;
+#ifdef BB_MTAB
case 'n':
useMtab = FALSE;
break;
diff --git a/util-linux/umount.c b/util-linux/umount.c
index 0f087e1..b0f393c 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -41,6 +41,9 @@ static const char umount_usage[] =
#ifdef BB_FEATURE_REMOUNT
"\t-r:\tTry to remount devices as read-only if mount is busy\n"
#endif
+#if defined BB_FEATURE_MOUNT_LOOP
+ "\t-f:\tDo not free loop device (if a loop device has been used)\n"
+#endif
;
struct _mtab_entry_t {
@@ -53,9 +56,14 @@ static struct _mtab_entry_t *mtab_cache = NULL;
+#if defined BB_FEATURE_MOUNT_LOOP
+static int freeLoop = TRUE;
+#endif
static int useMtab = TRUE;
static int umountAll = FALSE;
+#if defined BB_FEATURE_REMOUNT
static int doRemount = FALSE;
+#endif
extern const char mtab_file[]; /* Defined in utility.c */
@@ -167,7 +175,7 @@ static int do_umount(const char *name, int useMtab)
status = umount(name);
#if defined BB_FEATURE_MOUNT_LOOP
- if (blockDevice != NULL && !strncmp("/dev/loop", blockDevice, 9))
+ if (freeLoop == TRUE && blockDevice != NULL && !strncmp("/dev/loop", blockDevice, 9))
/* this was a loop device, delete it */
del_loop(blockDevice);
#endif
@@ -236,6 +244,11 @@ extern int umount_main(int argc, char **argv)
case 'a':
umountAll = TRUE;
break;
+#if defined BB_FEATURE_MOUNT_LOOP
+ case 'f':
+ freeLoop = FALSE;
+ break;
+#endif
#ifdef BB_MTAB
case 'n':
useMtab = FALSE;