From: Christoph Hellwig Date: Fri, 25 Feb 2022 18:09:03 +0000 (+0100) Subject: losetup: don't skip adding a new device if it already has a device node X-Git-Tag: v2.38-rc2~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfa92ef17e5fcf03d6525c63c8609bd0633a49fa;p=thirdparty%2Futil-linux.git losetup: don't skip adding a new device if it already has a device node Linux plans to deprecate the auto-creation of block devices based on access to the device node starting from kernel 5.18. Without that feature losetup will fail to create the loop device if a device node already exists, but the loop device to back it in the kernel does not exist yet. This is a scenario that should not happen in modern udev based distributions, but apparently there still are various scripts around that manually call the superfluous mknod. Change losetup to unconditionally call loopcxt_add_device when a specific device node is specified on the command line. If the loop device already exists the LOOP_CTL_ADD ioctl will fail, but given that losetup ignores the return value from loopcxt_add_device that failure has no further effect. Reported-by: Luis Chamberlain Signed-off-by: Christoph Hellwig Reviewed-by: Chaitanya Kulkarni Signed-off-by: Karel Zak --- diff --git a/sys-utils/losetup.c b/sys-utils/losetup.c index c400cbf128..09c028b6b4 100644 --- a/sys-utils/losetup.c +++ b/sys-utils/losetup.c @@ -522,7 +522,7 @@ static int create_loop(struct loopdev_cxt *lc, } } - if (hasdev && !is_loopdev(loopcxt_get_device(lc))) + if (hasdev) loopcxt_add_device(lc); /* losetup --noverlap /dev/loopN file.img */