From 4273a041f1ff735606f656ff6e60991d38568ba8 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 30 Sep 2022 02:03:32 +0900 Subject: [PATCH 1/2] udevadm: do not try to find device unit when a path like string is provided Otherwise, we provide misleading error message. Before: --- $ udevadm info /sys/class/foo Bad argument "/sys/class/foo", expected an absolute path in /dev/ or /sys/ or a unit name: Invalid argument --- After: --- $ udevadm info /sys/class/foo Unknown device "/sys/class/foo": No such device --- --- src/udev/udevadm-util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/udev/udevadm-util.c b/src/udev/udevadm-util.c index 4081976ca3..2447edad19 100644 --- a/src/udev/udevadm-util.c +++ b/src/udev/udevadm-util.c @@ -72,6 +72,10 @@ int find_device(const char *id, const char *prefix, sd_device **ret) { return 0; } + /* if a path is provided, then it cannot be a unit name. Let's return earlier. */ + if (is_path(id)) + return -ENODEV; + /* Check if the argument looks like a device unit name. */ return find_device_from_unit(id, ret); } From ad8c442a0b5f2352d85959f757df718b4fc056e9 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 30 Sep 2022 02:38:22 +0900 Subject: [PATCH 2/2] test-64-udev-storage: use wait command instead of hackish "udevadm lock true" Otherwise, "udevadm lock true" may lock a block device earlier than "udevadm lock sfdisk &". --- test/units/testsuite-64.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh index 0d4c4ff776..df92a0bb43 100755 --- a/test/units/testsuite-64.sh +++ b/test/units/testsuite-64.sh @@ -289,8 +289,9 @@ EOF } testcase_simultaneous_events() { - local disk expected i iterations link num_part part partscript rule target timeout + local disk expected i iterations key link num_part part partscript rule target timeout local -a devices symlinks + local -A running if [[ -n "${ASAN_OPTIONS:-}" ]] || [[ "$(systemd-detect-virt -v)" == "qemu" ]]; then num_part=2 @@ -346,11 +347,12 @@ EOF else udevadm lock --device="${devices[$disk]}" sfdisk -q -X gpt "${devices[$disk]}" <"$partscript" & fi + running[$disk]=$! done - # Wait for the above sfdisk commands to be finished. - for disk in {0..9}; do - udevadm lock --device="${devices[$disk]}" true + for key in "${!running[@]}"; do + wait "${running[$key]}" + unset "running[$key]" done if ((i % 10 <= 1)); then