On 4/23/25 14:56, Filip Schauer wrote: > Signed-off-by: Filip Schauer <f.scha...@proxmox.com> > --- > src/PVE/LXC.pm | 29 +++++++++++++++++++++++++++++ > src/lxc-pve-prestart-hook | 21 +-------------------- > 2 files changed, 30 insertions(+), 20 deletions(-) > > diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm > index d929608..d985b88 100644 > --- a/src/PVE/LXC.pm > +++ b/src/PVE/LXC.pm > @@ -6,6 +6,7 @@ use warnings; > use Cwd qw(); > use Errno qw(ELOOP ENOTDIR EROFS ECONNREFUSED EEXIST); > use Fcntl qw(O_RDONLY O_WRONLY O_NOFOLLOW O_DIRECTORY :mode); > +use File::Basename; > use File::Path; > use File::Spec; > use IO::Poll qw(POLLIN POLLHUP); > @@ -1662,6 +1663,34 @@ sub run_with_loopdev { > return $device; > } > > +sub create_passthrough_device_node($$$$$) { > + my ($passthrough_dir, $device, $mode, $rdev, $id_map) = @_; > + > + # Create the device node
nit: I think this comment is stating what is already obvious from the code > + my $passthrough_device_path = $passthrough_dir . $device->{path}; > + File::Path::make_path(dirname($passthrough_device_path)); > + PVE::Tools::mknod($passthrough_device_path, $mode, $rdev) > + or die("failed to mknod $passthrough_device_path: $!\n"); > + > + # Use chmod because umask could mess with the access mode on mknod > + my $passthrough_mode = 0660; > + $passthrough_mode = oct($device->{mode}) if defined($device->{mode}); > + chmod $passthrough_mode, $passthrough_device_path > + or die "failed to chmod $passthrough_mode $passthrough_device_path: > $!\n"; > + > + # Set uid and gid of the device node nit: same for this comment > + my $uid = 0; > + my $gid = 0; > + $uid = $device->{uid} if defined($device->{uid}); > + $gid = $device->{gid} if defined($device->{gid}); > + $uid = PVE::LXC::map_ct_uid_to_host($uid, $id_map); > + $gid = PVE::LXC::map_ct_gid_to_host($gid, $id_map); > + chown $uid, $gid, $passthrough_device_path > + or die("failed to chown $uid:$gid $passthrough_device_path: $!\n"); > + > + return $passthrough_device_path; > +} > + > # In scalar mode: returns a file handle to the deepest directory node. > # In list context: returns a list of: > # * the deepest directory node > diff --git a/src/lxc-pve-prestart-hook b/src/lxc-pve-prestart-hook > index fdaead2..61dfb3b 100755 > --- a/src/lxc-pve-prestart-hook > +++ b/src/lxc-pve-prestart-hook > @@ -144,26 +144,7 @@ PVE::LXC::Tools::lxc_hook('pre-start', 'lxc', sub { > die "Could not get mode or device ID of $absolute_path\n" > if (!defined($mode) || !defined($rdev)); > > - my $passthrough_device_path = $passthrough_dir . $absolute_path; > - File::Path::make_path(dirname($passthrough_device_path)); > - PVE::Tools::mknod($passthrough_device_path, $mode, $rdev) > - or die("failed to mknod $passthrough_device_path: $!\n"); > - > - # Use chmod because umask could mess with the access mode on mknod > - my $passthrough_mode = 0660; > - $passthrough_mode = oct($device->{mode}) if defined($device->{mode}); > - chmod $passthrough_mode, $passthrough_device_path > - or die "failed to chmod $passthrough_mode $passthrough_device_path: > $!\n"; > - > - # Set uid and gid of the device node > - my $uid = 0; > - my $gid = 0; > - $uid = $device->{uid} if defined($device->{uid}); > - $gid = $device->{gid} if defined($device->{gid}); > - $uid = PVE::LXC::map_ct_uid_to_host($uid, $id_map); > - $gid = PVE::LXC::map_ct_gid_to_host($gid, $id_map); > - chown $uid, $gid, $passthrough_device_path > - or die("failed to chown $uid:$gid $passthrough_device_path: $!\n"); > + PVE::LXC::create_passthrough_device_node($passthrough_dir, $device, > $mode, $rdev, $id_map); > > push @$passthrough_devices, [$absolute_path, $mode, $rdev]; > }; _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel