]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
losetup: report lost loop devices for finding free loop
authorJunxiao Bi <junxiao.bi@oracle.com>
Tue, 7 Nov 2023 18:48:06 +0000 (10:48 -0800)
committerKarel Zak <kzak@redhat.com>
Mon, 27 Nov 2023 08:49:49 +0000 (09:49 +0100)
commit a6ca0456cc6d("loopdev: report lost loop devices") forgot to
report lost loop device for finding free loop case. With this path,
it will show the following if next free loop device is lost.

 # ./losetup -f
 /dev/loop1 (lost)
 # ./losetup -f /tmp/test.img
 lt-losetup: /tmp/test.img: failed to set up loop device: No such file or directory
 lt-losetup: device node /dev/loop1 (7:1) is lost. You may use mknod(1) to recover it.

Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
sys-utils/losetup.c

index b218ce14d582a0119703c489e8669ffc88b59205..afeb5babbd8bc36cd7d28034737bb231d742ccd8 100644 (file)
@@ -950,7 +950,8 @@ int main(int argc, char **argv)
        case A_FIND_FREE:
                res = find_unused(&lc);
                if (!res)
-                       printf("%s\n", loopcxt_get_device(&lc));
+                       printf("%s%s\n", loopcxt_get_device(&lc),
+                               loopcxt_is_lost(&lc) ? " (lost)" : "");
                break;
        case A_SHOW:
                if (list)
@@ -991,6 +992,7 @@ int main(int argc, char **argv)
        }
 
        if (res && (act == A_SET_CAPACITY
+                   || act == A_CREATE
                    || act == A_SET_DIRECT_IO
                    || act == A_SET_BLOCKSIZE)
            && loopcxt_is_lost(&lc))