forked from pool/util-linux
38 lines
1000 B
Diff
38 lines
1000 B
Diff
Index: util-linux-ng-2.14/mount/lomount.c
|
|
===================================================================
|
|
--- util-linux-ng-2.14.orig/mount/lomount.c 2008-06-25 11:35:27.000000000 +0200
|
|
+++ util-linux-ng-2.14/mount/lomount.c 2008-06-25 12:47:28.000000000 +0200
|
|
@@ -878,6 +878,7 @@ set_loop(const char *device, const char
|
|
int
|
|
del_loop (const char *device) {
|
|
int fd;
|
|
+ int res = 0;
|
|
|
|
if ((fd = open (device, O_RDONLY)) < 0) {
|
|
int errsv = errno;
|
|
@@ -886,10 +887,22 @@ del_loop (const char *device) {
|
|
return 1;
|
|
}
|
|
if (ioctl (fd, LOOP_CLR_FD, 0) < 0) {
|
|
- perror ("ioctl: LOOP_CLR_FD");
|
|
+ if (errno == ENXIO) {
|
|
+ /* ignore ENXIO, device has probably been
|
|
+ * auto-destructed */
|
|
+ if (verbose > 1)
|
|
+ printf(_("del_loop(%s): already deleted\n"),
|
|
+ device);
|
|
+ res = 0;
|
|
+ } else {
|
|
+ perror ("ioctl: LOOP_CLR_FD");
|
|
+ res = 1;
|
|
+ }
|
|
+
|
|
close(fd);
|
|
- return 1;
|
|
+ return res;
|
|
}
|
|
+
|
|
close (fd);
|
|
if (verbose > 1)
|
|
printf(_("del_loop(%s): success\n"), device);
|