[pve-devel] [PATCH storage 4/6] diskmanage: add helper for udev workaround

Fabian Ebner f.ebner at proxmox.com
Mon Oct 25 15:47:47 CEST 2021


to avoid duplication. Current callers pass along at least one device,
but anticipate future callers that might call with the empty list. Do
nothing in that case, rather than triggering everything.

Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
 PVE/API2/Disks.pm           |  7 +------
 PVE/API2/Disks/Directory.pm |  6 +-----
 PVE/API2/Disks/LVM.pm       |  6 +-----
 PVE/API2/Disks/LVMThin.pm   |  6 +-----
 PVE/API2/Disks/ZFS.pm       |  6 +-----
 PVE/Diskmanage.pm           | 11 +++++++++++
 6 files changed, 16 insertions(+), 26 deletions(-)

diff --git a/PVE/API2/Disks.pm b/PVE/API2/Disks.pm
index 25c9ded..b618057 100644
--- a/PVE/API2/Disks.pm
+++ b/PVE/API2/Disks.pm
@@ -306,12 +306,7 @@ __PACKAGE__->register_method ({
 
 	my $worker = sub {
 	    PVE::Diskmanage::wipe_blockdev($disk);
-
-	    # FIXME: Remove once we depend on systemd >= v249.
-	    # Work around udev bug https://github.com/systemd/systemd/issues/18525 to ensure the
-	    # udev database is updated.
-	    eval { run_command(['udevadm', 'trigger', $disk]); };
-	    warn $@ if $@;
+	    PVE::Diskmanage::udevadm_trigger($disk);
 	};
 
 	my $basename = basename($disk); # avoid '/' in the ID
diff --git a/PVE/API2/Disks/Directory.pm b/PVE/API2/Disks/Directory.pm
index 36cebbc..e9b05be 100644
--- a/PVE/API2/Disks/Directory.pm
+++ b/PVE/API2/Disks/Directory.pm
@@ -275,11 +275,7 @@ __PACKAGE__->register_method ({
 
 		$write_ini->($ini, $mountunitpath);
 
-		# FIXME: Remove once we depend on systemd >= v249.
-		# Work around udev bug https://github.com/systemd/systemd/issues/18525 to ensure the
-		# udev database is updated and the $uuid_path symlink is actually created!
-		eval { run_command(['udevadm', 'trigger', $part]); };
-		warn $@ if $@;
+		PVE::Diskmanage::udevadm_trigger($part);
 
 		run_command(['systemctl', 'daemon-reload']);
 		run_command(['systemctl', 'enable', $mountunitname]);
diff --git a/PVE/API2/Disks/LVM.pm b/PVE/API2/Disks/LVM.pm
index ee9e282..1b88af2 100644
--- a/PVE/API2/Disks/LVM.pm
+++ b/PVE/API2/Disks/LVM.pm
@@ -163,11 +163,7 @@ __PACKAGE__->register_method ({
 
 		PVE::Storage::LVMPlugin::lvm_create_volume_group($dev, $name);
 
-		# FIXME: Remove once we depend on systemd >= v249.
-		# Work around udev bug https://github.com/systemd/systemd/issues/18525 to ensure the
-		# udev database is updated.
-		eval { run_command(['udevadm', 'trigger', $dev]); };
-		warn $@ if $@;
+		PVE::Diskmanage::udevadm_trigger($dev);
 
 		if ($param->{add_storage}) {
 		    my $storage_params = {
diff --git a/PVE/API2/Disks/LVMThin.pm b/PVE/API2/Disks/LVMThin.pm
index 52f3062..23f262a 100644
--- a/PVE/API2/Disks/LVMThin.pm
+++ b/PVE/API2/Disks/LVMThin.pm
@@ -141,11 +141,7 @@ __PACKAGE__->register_method ({
 		    $name
 		]);
 
-		# FIXME: Remove once we depend on systemd >= v249.
-		# Work around udev bug https://github.com/systemd/systemd/issues/18525 to ensure the
-		# udev database is updated.
-		eval { run_command(['udevadm', 'trigger', $dev]); };
-		warn $@ if $@;
+		PVE::Diskmanage::udevadm_trigger($dev);
 
 		if ($param->{add_storage}) {
 		    my $storage_params = {
diff --git a/PVE/API2/Disks/ZFS.pm b/PVE/API2/Disks/ZFS.pm
index e8d5e7c..e892712 100644
--- a/PVE/API2/Disks/ZFS.pm
+++ b/PVE/API2/Disks/ZFS.pm
@@ -426,11 +426,7 @@ __PACKAGE__->register_method ({
 		    run_command($cmd);
 		}
 
-		# FIXME: Remove once we depend on systemd >= v249.
-		# Work around udev bug https://github.com/systemd/systemd/issues/18525 to ensure the
-		# udev database is updated.
-		eval { run_command(['udevadm', 'trigger', $devs->@*]); };
-		warn $@ if $@;
+		PVE::Diskmanage::udevadm_trigger($devs->@*);
 
 		if ($param->{add_storage}) {
 		    my $storage_params = {
diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm
index 18459f9..d67cc6b 100644
--- a/PVE/Diskmanage.pm
+++ b/PVE/Diskmanage.pm
@@ -966,4 +966,15 @@ sub wipe_blockdev {
     }
 }
 
+# FIXME: Remove once we depend on systemd >= v249.
+# Work around udev bug https://github.com/systemd/systemd/issues/18525 ensuring database is updated.
+sub udevadm_trigger {
+    my @devs = @_;
+
+    return if scalar(@devs) == 0;
+
+    eval { run_command(['udevadm', 'trigger', @devs]); };
+    warn $@ if $@;
+}
+
 1;
-- 
2.30.2






More information about the pve-devel mailing list