]> err.no Git - util-linux/commitdiff
mount: don't use auto-clear loopdev if mtab is available
authorKarel Zak <kzak@redhat.com>
Tue, 20 Jul 2010 09:37:23 +0000 (11:37 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 20 Jul 2010 09:37:23 +0000 (11:37 +0200)
 # mount /home/images/floppy.img /mnt/test2
 # mount | grep loop
 /dev/loop0 on /mnt/test2 type udf (rw)

mount(8) with auto-clear loopdev does not store information about the
original backing file (the image) to /etc/mtab. (Note that this is our
long-term goal, because we want to remove mtab from Linux.)

Unfortunately, losetup(8) is not able to provide full path for the
backing file, because LOOP_GET_STATUS ioctl uses 64 bytes for the
filename...

So, without the information about the backing file in mtab the
information about mapping between the file and the loopdev is
unaccessible from userspace.

From my point of view it would be nice to add all necessary
information about loopdevs to /sys rather than rely on broken
LOOP_GET_STATUS[64] ioctls.

with this patch:

  # mount /home/images/floppy.img /mnt/test2
  # mount | grep loop# mount | grep loop
  /home/images/floppy.img on /mnt/test2 type udf (ro,loop=/dev/loop0)

Addresses: http://bugzilla.redhat.com/show_bug.cgi?id=615389
Signed-off-by: Karel Zak <kzak@redhat.com>
mount/mount.c

index b2e445a45a42f2be7d3a90ed376957bbcd7562cc..fef1a852c4880f01cec7407291e093c8b254ae69 100644 (file)
@@ -1141,7 +1141,8 @@ loop_check(const char **spec, const char **type, int *flags,
       if (verbose)
        printf(_("mount: skipping the setup of a loop device\n"));
     } else {
-      int loop_opts = SETLOOP_AUTOCLEAR; /* always attempt autoclear */
+      /* use autoclear loopdev on system without regular mtab only */
+      int loop_opts = mtab_is_writable() ? 0 : SETLOOP_AUTOCLEAR;
       int res;
 
       if (*flags & MS_RDONLY)