]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: (loop) detect and report lost loop nodes
authorKarel Zak <kzak@redhat.com>
Wed, 22 May 2024 09:36:25 +0000 (11:36 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 22 May 2024 09:36:25 +0000 (11:36 +0200)
Fixed: https://github.com/util-linux/util-linux/issues/2605
Signed-off-by: Karel Zak <kzak@redhat.com>
libmount/src/hook_loopdev.c

index 597b9339ac09cac44cd4a03774ea77471fb1953a..c01d536ce1520c56ec73c88ca1debad42c007ec2 100644 (file)
@@ -277,6 +277,14 @@ static int setup_loopdev(struct libmnt_context *cxt,
                goto done_no_deinit;
        if (mnt_opt_has_value(loopopt)) {
                rc = loopcxt_set_device(&lc, mnt_opt_get_value(loopopt));
+               if (rc == 0 && loopcxt_is_lost(&lc)) {
+                       DBG(LOOP, ul_debugobj(cxt, "node lost"));
+
+                       dev_t devno = loopcxt_get_devno(&lc);
+                       mnt_context_sprintf_errmsg(cxt, _("device node %s (%u:%u) is lost"),
+                                       loopcxt_get_device(&lc), major(devno), minor(devno));
+                       rc = -EINVAL;
+               }
                if (rc == 0)
                        loopdev = loopcxt_get_device(&lc);
        }