On 6/4/19 9:21 AM, Dominik Csapak wrote: > we will use this for adding a partition to a disk when using a device > for ceph osd db/wal which already has partitions on it > > first we search for the highest partition number, then add the partition > and search for the resulting device (we cannot assume to simply > append the number, e.g. from /dev/nvme0n1 we get /dev/nvme0n1pX) > > Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> > --- > PVE/Diskmanage.pm | 36 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 36 insertions(+) > > diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm > index daad6df..645d67b 100644 > --- a/PVE/Diskmanage.pm > +++ b/PVE/Diskmanage.pm > @@ -683,4 +683,40 @@ sub assert_disk_unused { > return undef; > } > > +sub append_partition { > + my ($dev, $size) = @_; > + > + my $devname; > + if ($dev =~ m|^/dev/(.*)$|) { > + $devname = $1; > + }
else ?? $devname can be undef and is used in string and regex below.. either fallback or die? > + > + my $newpartid = 1; > + dir_glob_foreach("/sys/block/$devname", qr/\Q$devname\E.+/, sub { > + my ($part) = @_; > + > + my ($partid) = $part =~ m/(\d+)$/; > + $partid = int($partid); could be undef, if no parition is present, not sure if you then can hit this code path at all, but maybe still worth dealing with that.. And yes, I know that int(undef) == 0, but it produces also a warning and is a bit to subtle for my taste.. > + > + if ($partid >= $newpartid) { > + $newpartid = $partid + 1; > + } > + }); > + > + $size = PVE::Tools::convert_size($size, 'b' => 'mb'); > + > + run_command([ $SGDISK, '-n', "$newpartid:0:+${size}M", $dev ], > + errmsg => "error creating partition '$newpartid' on '$dev'"); > + > + my $partition; > + > + dir_glob_foreach("/sys/block/$devname", qr/\Q$devname\E.*$newpartid/, > sub { > + my ($part) = @_; > + > + $partition = "/dev/$part"; this is a, in a certain way, elegant solution, maybe adding a small comment could be good, something like: # new part name is dependent of underlying device type, "autocomplete" it > + }); > + > + return $partition; > +} > + > 1; > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel