Skip to content

Commit 55401db

Browse files
committed
Avoid udev interactions on RH7+ when creating partitions
If the partition created by parted happens to already contain some metadata (like LVM signature), then the udev rules triggered by the partition being created automatically kick off actions like activating the logical volume. This change prevents such udev rules from triggering until the contents are wiped. This solution is still not ideal, but so far appears to work.
1 parent abda961 commit 55401db

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

src/main/perl/Disk.pm

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,10 +399,9 @@ sub clearpart_ks
399399

400400
print <<EOF;
401401
wipe_metadata $path 1
402-
403402
parted $path -s -- mklabel $self->{label}
404-
405403
rereadpt $path
404+
udevadm settle
406405
407406
EOF
408407
}

src/main/perl/Partition.pm

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,11 @@ sub create_pre_ks
627627
# make sure this never matches on anything else
628628
$extended_txt .= "_no_msdos_label" if ($self->{holding_dev}->{label} ne MSDOS);
629629

630+
# Avoid LVM/mdadm/etc. autodiscovery kicking in after the partition has
631+
# been created
632+
my $pause_udev = $self->{anaconda_version} >= ANACONDA_VERSION_EL_7_0 ? "udevadm control --stop-exec-queue" : "";
633+
my $unpause_udev = $self->{anaconda_version} >= ANACONDA_VERSION_EL_7_0 ? "udevadm control --start-exec-queue" : "";
634+
630635
print <<EOF;
631636
if ! grep -q '$self->{devname}\$' /proc/partitions
632637
then
@@ -673,26 +678,31 @@ EOF
673678
}
674679
print <<EOF;
675680
$end_txt
681+
$pause_udev
676682
parted $disk -s -- u s mkpart $self->{type} \$begin \$end
683+
while [ ! -e $path ]; do
684+
sleep 1
685+
udevadm settle --timeout=5
686+
done
687+
if [ "$self->{type}" != "$extended_txt" ]
688+
then
689+
wipe_metadata $path $clear_mb
690+
fi
691+
$unpause_udev
692+
udevadm settle
677693
EOF
678694

679695
my @flags = keys(%{$self->{flags}});
680696
if ( @flags > 0 ) {
681697
for my $flag (sort @flags) {
682698
my $value = $self->{flags}{$flag} ? "on" : "off";
683-
print <<EOF;
684-
parted $disk -s -- set $n $flag $value
685-
EOF
699+
print " parted $disk -s -- set $n $flag $value\n";
686700
}
701+
# Call this once, after all flags have been set
702+
print " udevadm settle\n";
687703
}
688704

689705
print <<EOF;
690-
rereadpt $disk
691-
if [ "$self->{type}" != "$extended_txt" ]
692-
then
693-
wipe_metadata $path $clear_mb
694-
fi
695-
696706
echo $path >> @{[PART_FILE]}
697707
fi
698708
EOF

0 commit comments

Comments
 (0)