diff options
| author | Karel Zak <kzak@redhat.com> | 2024-05-22 11:36:25 +0200 |
|---|---|---|
| committer | Karel Zak <kzak@redhat.com> | 2024-05-22 11:36:25 +0200 |
| commit | 9f94d121228b924e7dcc81f30efb2de983ea3359 (patch) | |
| tree | db68790d7807afdb3201eb97e96ab172a4567bf6 /libmount/src/hook_loopdev.c | |
| parent | 41476dd406114f231bea5bc1aa6297cfbb5474ba (diff) | |
| download | util-linux-9f94d121228b924e7dcc81f30efb2de983ea3359.tar.gz | |
libmount: (loop) detect and report lost loop nodes
Fixed: https://github.com/util-linux/util-linux/issues/2605
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libmount/src/hook_loopdev.c')
| -rw-r--r-- | libmount/src/hook_loopdev.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libmount/src/hook_loopdev.c b/libmount/src/hook_loopdev.c index 597b9339ac..c01d536ce1 100644 --- a/libmount/src/hook_loopdev.c +++ b/libmount/src/hook_loopdev.c @@ -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); } |
