]> err.no Git - util-linux/commitdiff
mount: use auto-loopdev for all known filesystems
authorKarel Zak <kzak@redhat.com>
Thu, 8 Apr 2010 14:38:23 +0000 (16:38 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 8 Apr 2010 14:46:52 +0000 (16:46 +0200)
The commit e580266914734898999f652025f9c7141023df66 introduced
"automatically detect and loop-mount regular files". This should be
used only for filesystems that require block devices.

All known filesystems in libblkid depend block devices, so we can
use blkid_known_fstype() as a filter for this feature.

Signed-off-by: Karel Zak <kzak@redhat.com>
mount/mount.8
mount/mount.c

index 9675cc62db775c4e6b0fdccd44117507e92e3494..06ea3acd21c940ad05106e8c53adc21f8682af4c 100644 (file)
@@ -2560,13 +2560,14 @@ will try to find some unused loop device and use that, for example
 The mount command
 .B automatically
 creates a loop device from a regular file if a filesystem type is
-not specified, for example:
+not specified or the filesystem is known for libblkid, for example:
 .RS
 .sp
 .B "mount /tmp/disk.img /mnt"
 .sp
+.B "mount -t ext3 /tmp/disk.img /mnt"
+.sp
 .RE
-
 This type of mount knows about four options, namely
 .BR loop ", " offset ", " sizelimit " and " encryption ,
 that are really options to
index 7a5ea06d6d2f68b7f37e4cca024fafff67ecceb8..8cab2e8a0969503d0f46f925cc609f403c4b9db6 100644 (file)
@@ -1120,16 +1120,15 @@ loop_check(const char **spec, const char **type, int *flags,
   *loopfile = *spec;
 
   /* Automatically create a loop device from a regular file if a filesystem
-   * is not specified.
+   * is not specified or the filesystem is known for libblkid (these
+   * filesystems work with block devices only).
    *
    * Note that there is not a restriction (on kernel side) that prevents regular
    * file as a mount(2) source argument. A filesystem that is able to mount
    * regular files could be implemented.
-   *
-   * If the filesystem type is specified than "-o loop" is required to create a
-   * loop device.
    */
-  if (!*loop && (!*type || strcmp(*type, "auto") == 0)) {
+  if (!*loop && (!*type || strcmp(*type, "auto") == 0 ||
+                          fsprobe_known_fstype(*type))) {
     struct stat st;
     if (stat(*loopfile, &st) == 0)
       *loop = S_ISREG(st.st_mode);