Skip to contentSkip to conversation

Bug#826328: util-linux: losetup -d disfunctional for cloop and similar loop-compatible block devices

DISCUSSION Prof. Dipl.-Ing. Klaus Knopper 1 participant 1 message Jun 8, 2016

lore
Share & tools
lore
#0 lore raw

Hello,

As recommended by the Debian package maintainer, I'm forwarding this as upstream bug report to the kernel list.

Package: util-linux
Version: 2.28-5
Severity: normal
Tags: upstream

Losetup was able to setup compressed loopback (cloop) devices, which have a similar ioctl API, until recently the code in sys-utils/losetup.c and lib/loopdev.c was changed to only accept devices with loopbacks major device id.

While attaching a file to a cloop device still works (no check here), detaching with -d fails with error message:

losetup: /dev/cloop7: failed to use device: Success

The reason for this is:

---

sys-utils/losetup.c:

case 'd':

	act = A_DELETE;
		if (!is_loopdev(optarg) ||
		    loopcxt_set_device(&lc, optarg))
			err(EXIT_FAILURE, _("%s: failed to use device"),
			optarg);
	break;

---

lib/loopdev.c:

int is_loopdev(const char *device)

{
	struct stat st;

	if (!device)
		return 0;

	return (stat(device, &st) == 0 &&
		S_ISBLK(st.st_mode) &&
		major(st.st_rdev) == LOOPDEV_MAJOR);
}

---

Because of this, losetup from util-linux no longer works for cloop devices.

Using busybox losetup for now.

Suggestion: Remove the check for

		major(st.st_rdev) == LOOPDEV_MAJOR);

in is_loopdev() in lib/loopdev.c.

Regards
-Klaus Knopper