This felt unusually risk to me, so I took a look at the patch before releasing. I found a number of problems:
1. This patch leaks a file descriptor every time the new code path runs. loop_ctl_fd is opened but not closed. 2. "int devnr = -1" is defined but never used. 3. > ll->ncur = ioctl(loop_ctl_fd, LOOP_CTL_GET_FREE); This is wrong. ncur is an integer iterator, not necessarily a loop number. It keeps state between multiple calls to looplist_next, and you're clobbering it. It may be the case that it happens not to get used again when LLFLG_LOOPCTL is set, but that's no reason to re-use an existing variable for a different purpose. This makes the code much more difficult to check for unexpected side effects and thus may hide bugs. 4. looplist_next() is called to acquire both free and used loop device fds (based on LLFLG_USEDONLY/LLFLG_FREEONLY; see looplist_open_dev()). The fashion in which it does this is quite convulated. Additionally, it appears designed to be called multiple times (like a C++ iterator). The new code will always return a new loop device when requested. This is of course the point of this SRU. However, a consequence of this is that calls to looplist_next with LLFLG_FREEONLY are now unbounded, and this may have implications throughout the code. I can't find any, but this is certainly Regression Potential territory, and IMHO all known use cases that call looplist_next() should be checked for correct behaviour in SRU verification. 5. The "mount" and "umount" commands also call functions defined by lomount.c, so loop-affecting behaviour should be checked in these, too. It feels like luck to me that this code didn't introduce a bug that I could find. However, we want to minimise regression risk in SRUs. Even though I couldn't find a specific bug, issues 1 and 3 above unnecessarily add to the risk of regression in this SRU, IMHO, and are easy to mitigate. So I'm marking this bug verification-failed. You might as well fix issue 2 while you're there. For issues 4 and 5, I'll update the test plan in the bug description. ** Tags removed: verification-done ** Tags added: verification-failed ** Description changed: trusty has a very old util-linux which does not yet know about /dev /loop-control to create arbitrarily many loop devices. This feature was introduced in Linux 3.1 already (i. e. before precise even). This is a showstopper for backporting snappy as that needs a lot of loop mounts. Support for loop-control got introduced later util-linux versions, but backporting full support for it (for losetup) is too intrusive. We only need a partial backport for "mount -o loop". SRU TEST CASE: First, use up all default 8 loop devices: $ for i in `seq 8`; do echo $i; sudo losetup --find /etc/issue; done Now try to use a 9th: $ dd if=/dev/zero of=/tmp/img bs=1M count=50 $ mkfs.ext2 -F /tmp/img $ sudo mount -o loop /tmp/img /mnt With current trusty's "mount" package this will fail with "could not find any free loop device". With the proposed version, this should succeed, and "sudo losetup -a" should show "/dev/loop8: ... (/tmp/img)". Now, reboot, disable loop-control with sudo mv /dev/loop-control{,.disabled} and run the test case again. Now "mount -o loop" should fail with "could not find any free loop device" (as before). Ensure that there are no hangs, infinite loops, etc. + ADDITIONAL REGRESSION CHECKING TEST CASES + + 1. Check that every type of losetup call documented in the losetup + manpage still works correctly. + + 2. Check that mount and umount commands that use loop devices still work + correctly. + REGRESSION POTENTIAL: /dev/loop-control and the corresponding util-linux support has exited for a long time without known/major issues, so this should be fairly safe. Also, the patch falls back to the previous "iterate over loop0 to loop7" behaviour if loop-control is not available. -- You received this bug notification because you are a member of Ubuntu Touch seeded packages, which is subscribed to util-linux in Ubuntu. https://bugs.launchpad.net/bugs/1640823 Title: [trusty] mount -o loop is limited to 8 loop devices Status in util-linux package in Ubuntu: Fix Released Status in util-linux source package in Trusty: Fix Committed Bug description: trusty has a very old util-linux which does not yet know about /dev /loop-control to create arbitrarily many loop devices. This feature was introduced in Linux 3.1 already (i. e. before precise even). This is a showstopper for backporting snappy as that needs a lot of loop mounts. Support for loop-control got introduced later util-linux versions, but backporting full support for it (for losetup) is too intrusive. We only need a partial backport for "mount -o loop". SRU TEST CASE: First, use up all default 8 loop devices: $ for i in `seq 8`; do echo $i; sudo losetup --find /etc/issue; done Now try to use a 9th: $ dd if=/dev/zero of=/tmp/img bs=1M count=50 $ mkfs.ext2 -F /tmp/img $ sudo mount -o loop /tmp/img /mnt With current trusty's "mount" package this will fail with "could not find any free loop device". With the proposed version, this should succeed, and "sudo losetup -a" should show "/dev/loop8: ... (/tmp/img)". Now, reboot, disable loop-control with sudo mv /dev/loop-control{,.disabled} and run the test case again. Now "mount -o loop" should fail with "could not find any free loop device" (as before). Ensure that there are no hangs, infinite loops, etc. ADDITIONAL REGRESSION CHECKING TEST CASES 1. Check that every type of losetup call documented in the losetup manpage still works correctly. 2. Check that mount and umount commands that use loop devices still work correctly. REGRESSION POTENTIAL: /dev/loop-control and the corresponding util- linux support has exited for a long time without known/major issues, so this should be fairly safe. Also, the patch falls back to the previous "iterate over loop0 to loop7" behaviour if loop-control is not available. To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/util-linux/+bug/1640823/+subscriptions -- Mailing list: https://launchpad.net/~touch-packages Post to : touch-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~touch-packages More help : https://help.launchpad.net/ListHelp