]> err.no Git - util-linux/commitdiff
mount: free loop device on failure
authorSascha Sommer <ssommer@suse.de>
Tue, 21 Aug 2007 13:13:43 +0000 (15:13 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 27 Aug 2007 08:22:06 +0000 (10:22 +0200)
Testcase:
$ mount -oloop /etc/group /mnt
ioctl: LOOP_CLR_FD: Device or resource busy
mount: you must specify the filesystem type
$ losetup /dev/loop0
/dev/loop0: [0803]:1931929 (/etc/group)

Signed-off-by: Matthias Koenig <mkoenig@suse.de>
mount/fsprobe_volumeid.c
mount/lomount.c

index 4b58e720e5274b4348c97135696b95d86a9cf15f..6b47392bc1535ba9843ef88cd4f0bc9e5c2263b4 100644 (file)
@@ -34,8 +34,10 @@ static char
                return NULL;
 
        id = volume_id_open_fd(fd);
-       if (!id)
+       if (!id) {
+               close(fd);
                return NULL;
+       }
 
        /* TODO: use blkdev_get_size() */
        if (ioctl(fd, BLKGETSIZE64, &size) != 0)
@@ -61,6 +63,7 @@ static char
        }
 
        volume_id_close(id);
+       close(fd);
        return value;
 }
 
index ae9eb36e73608473436b34280e7788688747178f..ace474cb34b3d8d1505196a393ba3fe35760f555 100644 (file)
@@ -398,6 +398,7 @@ del_loop (const char *device) {
        }
        if (ioctl (fd, LOOP_CLR_FD, 0) < 0) {
                perror ("ioctl: LOOP_CLR_FD");
+               close(fd);
                return 1;
        }
        close (fd);