diff --git a/libparted-partition-naming.patch b/libparted-partition-naming.patch index 819dc26..b7d2795 100644 --- a/libparted-partition-naming.patch +++ b/libparted-partition-naming.patch @@ -1,11 +1,26 @@ +From: Petr Uzel +Subject: libparted: Change partition naming for SUSE needs +References: bsc#1056508 +Patch-mainline: no, custom SUSE patch + +Device mapper partitions should always use the suffix "-part%d" +for partition names. CPQ arrays and SDMMC devices should always +use the "p%d" suffix. DAC960, ATARAID, and devices with a trailing +number in their name should always use the "_part%d" suffix. +All other devices should use the "%d" suffix. + +YaST depends on this. + +[mwilck: Fixed dm part name in _dm_add_partition(), bsc#1056508] +[sparschauer: Fixed dm part name in _dm_resize_partition(), bsc#1056508] +[sparschauer: Wrote the patch description] +Signed-off-by: Sebastian Parschauer --- libparted/arch/linux.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) -Index: parted-3.2/libparted/arch/linux.c -=================================================================== ---- parted-3.2.orig/libparted/arch/linux.c -+++ parted-3.2/libparted/arch/linux.c +--- a/libparted/arch/linux.c ++++ b/libparted/arch/linux.c @@ -2342,11 +2342,17 @@ _device_get_part_path (PedDevice const * result = zasprintf ("%.*s/part%d", (int) (path_len - 5), devpath, num); @@ -32,7 +47,16 @@ Index: parted-3.2/libparted/arch/linux.c vol_name = zasprintf ("%s%s%d", dev_name, - isdigit (dev_name[name_len - 1]) ? "p" : "", -+ isdigit (dev_name[name_len - 1]) ? "-part" : "", ++ "-part", + part->num); + if (vol_name == NULL) + goto err; +@@ -2870,7 +2876,7 @@ _dm_resize_partition (PedDisk* disk, con + size_t name_len = strlen (dev_name); + vol_name = zasprintf ("%s%s%d", + dev_name, +- isdigit (dev_name[name_len - 1]) ? "p" : "", ++ "-part", part->num); if (vol_name == NULL) goto err; diff --git a/parted.changes b/parted.changes index ca3bc74..6f4c83f 100644 --- a/parted.changes +++ b/parted.changes @@ -1,3 +1,21 @@ +------------------------------------------------------------------- +Wed Sep 13 13:54:45 UTC 2017 - sparschauer@suse.de + +- Make SUSE parted pass all tests in upstream test suite + - add: tests-set-optimal-blocks-for-scsi_debug.patch + - add: tests-increase-scsi_debug-tmo.patch + - add: tests-use-wait_for_dev_to_-functions.patch + - add: tests-wait_for_-loop.patch + - add: tests-update-t0220-t0280-for-swap-flag.patch + - add: tests-adapt-to-SUSE.patch + +------------------------------------------------------------------- +Wed Sep 13 10:30:16 CEST 2017 - sparschauer@suse.de + +- Fix partition naming for dm devices not ending in a digit and + also fix resizing of dm partitions (bsc#1056508) + - amend: libparted-partition-naming.patch + ------------------------------------------------------------------- Thu Aug 24 16:51:37 CEST 2017 - sparschauer@suse.de diff --git a/parted.spec b/parted.spec index 865b586..24a9955 100644 --- a/parted.spec +++ b/parted.spec @@ -79,6 +79,14 @@ Patch50: libparted-dasd-add-swap-flag-handling-for-DASD-CDL.patch Patch51: parted-mkpart-allow-empty-gpt-part-name.patch Patch52: libparted-fix-starting-CHS-in-protective-MBR.patch Patch100: parted-fatresize-autoconf.patch +# Upstream tests patches +Patch150: tests-set-optimal-blocks-for-scsi_debug.patch +Patch151: tests-increase-scsi_debug-tmo.patch +Patch152: tests-use-wait_for_dev_to_-functions.patch +Patch153: tests-wait_for_-loop.patch +Patch154: tests-update-t0220-t0280-for-swap-flag.patch +# SUSE tests patches +Patch200: tests-adapt-to-SUSE.patch BuildRequires: check-devel BuildRequires: device-mapper-devel >= 1.02.33 BuildRequires: e2fsprogs-devel @@ -171,6 +179,12 @@ to develop applications that require these. %patch51 -p1 %patch52 -p1 %patch100 -p1 +%patch150 -p1 +%patch151 -p1 +%patch152 -p1 +%patch153 -p1 +%patch154 -p1 +%patch200 -p1 %build export CFLAGS="%{optflags} `ncursesw6-config --cflags`" diff --git a/tests-adapt-to-SUSE.patch b/tests-adapt-to-SUSE.patch new file mode 100644 index 0000000..809a6c5 --- /dev/null +++ b/tests-adapt-to-SUSE.patch @@ -0,0 +1,254 @@ +From: Sebastian Parschauer +Date: Wed Sep 13 11:14:42 2017 +0200 +Subject: tests: Adapt to SUSE parted +Patch-mainline: no, custom SUSE patch + +msdos type flag +Tests: t0283, t2200, t2310, t3200, t3300, t4100, t6002, t9042 +For: parted-type.patch + +Change dm partition name from 'pN' to '-partN' +Tests: t6001, t6002, t6004, t6005 +For: libparted-partition-naming.patch +--- +--- a/tests/t2200-dos-label-recog.sh ++++ b/tests/t2200-dos-label-recog.sh +@@ -45,7 +45,7 @@ printf FAT | dd bs=1c seek=82 count=3 of + # print the partition table + parted -m -s $dev unit s p > out || fail=1 + tail -2 out > k && mv k out || fail=1 +-printf "1:2048s:4095s:2048s:::;\n2:4096s:8191s:4096s:::;\n" > exp || fail=1 ++printf "1:2048s:4095s:2048s:::type=83;\n2:4096s:8191s:4096s:::type=83;\n" > exp || fail=1 + + compare exp out || fail=1 + +--- a/tests/t2310-dos-extended-2-sector-min-offset.sh ++++ b/tests/t2310-dos-extended-2-sector-min-offset.sh +@@ -33,8 +33,8 @@ p5=${scsi_dev}5 + cat < exp || framework_failure + BYT; + $scsi_dev:$((2048*512/$ss))s:scsi:$ss:$ss:msdos:Linux scsi_debug:; +-1:64s:128s:65s:::lba; +-5:65s:128s:64s:::; ++1:64s:128s:65s:::lba, type=0f; ++5:65s:128s:64s:::type=83; + EOF + + # Create a DOS label with an extended partition starting at sector 64. +--- a/tests/t3200-resize-partition.sh ++++ b/tests/t3200-resize-partition.sh +@@ -75,7 +75,7 @@ compare /dev/null err || fail=1 + parted -m -s $dev u s p > out 2>&1 || fail=1 + + sed -n 3p out > k && mv k out || fail=1 +-printf "1:$default_start:$new_end:3073s:::$ms;\n" > exp || fail=1 ++printf "1:$default_start:$new_end:3073s:::type=83;\n" > exp || fail=1 + compare exp out || fail=1 + + # Remove the partition explicitly, so that mklabel doesn't evoke a warning. +--- a/tests/t3300-palo-prep.sh ++++ b/tests/t3300-palo-prep.sh +@@ -20,9 +20,9 @@ + ss=$sector_size_ + + cat > exp < out 2> err || fail=1 + +-grep -E '^1:2048s:4095s:2048s:ext2::lba, p...;$' out > k; mv k out ++grep -E '^1:2048s:4095s:2048s:ext2::lba, p..., type=..;$' out > k; mv k out + + compare exp out || fail=1 + +--- a/tests/t4100-msdos-starting-sector.sh ++++ b/tests/t4100-msdos-starting-sector.sh +@@ -56,7 +56,7 @@ cat < exp || fail=1 + BYT; + path:${N}s:file:$ss:$ss:msdos::; + 1:32s:2047s:2016s:free; +-1:2048s:4095s:2048s:::; ++1:2048s:4095s:2048s:::type=83; + EOF + + # create a partition at the end of the label +--- a/tests/t6001-psep.sh ++++ b/tests/t6001-psep.sh +@@ -31,9 +31,9 @@ linear2_=plinear-$$foo + d1= d2= + f1= f2= + cleanup_fn_() { +- dmsetup remove ${linear_}p1 ++ dmsetup remove ${linear_}-part1 + dmsetup remove $linear_ +- dmsetup remove ${linear2_}1 ++ dmsetup remove ${linear2_}-part1 + dmsetup remove $linear2_ + test -n "$d1" && losetup -d "$d1" + test -n "$d2" && losetup -d "$d2" +@@ -56,7 +56,7 @@ parted -s $dev mklabel msdos mkpart prim + compare /dev/null out || fail=1 + + #make sure device name is correct +-wait_for_dev_to_appear_ ${dev}p1 || fail=1 ++wait_for_dev_to_appear_ ${dev}-part1 || fail=1 + + #repeat on name not ending in a digit + # setup: create a mapping +@@ -68,7 +68,7 @@ parted -s $dev mklabel msdos mkpart prim + compare /dev/null out || fail=1 + + #make sure device name is correct +-wait_for_dev_to_appear_ ${dev}1 || fail=1 ++wait_for_dev_to_appear_ ${dev}-part1 || fail=1 + + if [ -n "$fail" ]; then + ls /dev/mapper +--- a/tests/t6004-dm-many-partitions.sh ++++ b/tests/t6004-dm-many-partitions.sh +@@ -50,10 +50,10 @@ parted -m -a min -s /dev/mapper/$dm_name + + # Make sure all the partitions appeared under /dev/mapper/ + for ((i=1; i<=$n_partitions; i+=1)); do +- wait_for_dev_to_appear_ "/dev/mapper/${dm_name}p$i" || { fail=1; break; } ++ wait_for_dev_to_appear_ "/dev/mapper/${dm_name}-part$i" || { fail=1; break; } + + # remove the partitions as we go, otherwise cleanup won't work. +- dmsetup remove /dev/mapper/${dm_name}p$i ++ dmsetup remove /dev/mapper/${dm_name}-part$i + done + + Exit $fail +--- a/tests/t6005-dm-uuid.sh ++++ b/tests/t6005-dm-uuid.sh +@@ -47,14 +47,14 @@ for ((i=1; i<=$n_partitions; i+=1)); do + cmd="$cmd mkpart p$i ${s}s ${s}s" + done + parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fail=1 +-wait_for_dev_to_appear_ /dev/mapper/${dm_name}p${n_partitions} || fail=1 ++wait_for_dev_to_appear_ /dev/mapper/${dm_name}-part${n_partitions} || fail=1 + + # Make sure all the partitions have UUIDs + for ((i=1; i<=$n_partitions; i+=1)); do +- dmsetup info /dev/mapper/${dm_name}p$i | grep UUID || fail=1 ++ dmsetup info /dev/mapper/${dm_name}-part$i | grep UUID || fail=1 + + # remove the partitions as we go, otherwise cleanup won't work. +- dmsetup remove /dev/mapper/${dm_name}p$i ++ dmsetup remove /dev/mapper/${dm_name}-part$i + done + + Exit $fail +--- a/tests/t0283-overlap-partitions.sh ++++ b/tests/t0283-overlap-partitions.sh +@@ -54,8 +54,8 @@ Partition Table: msdos + Disk Flags: + + Number Start End Size Type File system Flags +- 1 1049kB 5243kB 4194kB primary +- 2 5242kB 8000kB 2758kB primary ++ 1 1049kB 5243kB 4194kB primary type=83 ++ 2 5242kB 8000kB 2758kB primary type=83 + + (parted) rm + Partition number? 2 +@@ -94,7 +94,7 @@ Partition Table: msdos + Disk Flags: + + Number Start End Size Type File system Flags +- 1 1049kB 5243kB 4194kB primary ++ 1 1049kB 5243kB 4194kB primary type=83 + + (parted) rm + Partition number? 1 +--- a/tests/t6002-dm-busy.sh ++++ b/tests/t6002-dm-busy.sh +@@ -35,9 +35,9 @@ d1= + f1= + dev= + cleanup_fn_() { +- umount "${dev}p2" > /dev/null 2>&1 +- dmsetup remove ${linear_}p1 +- dmsetup remove ${linear_}p2 ++ umount "${dev}-part2" > /dev/null 2>&1 ++ dmsetup remove ${linear_}-part1 ++ dmsetup remove ${linear_}-part2 + dmsetup remove $linear_ + test -n "$d1" && losetup -d "$d1" + rm -f "$f1" +@@ -62,14 +62,14 @@ parted -s $dev -a none mkpart primary fa + compare /dev/null out || fail=1 + + # wait for new partition device to appear +-wait_for_dev_to_appear_ ${dev}p2 || fail_ ${dev}p2 did not appear ++wait_for_dev_to_appear_ ${dev}-part2 || fail_ ${dev}-part2 did not appear + +-mkfs.vfat -F 32 ${dev}p2 || fail_ mkfs.vfat failed ++mkfs.vfat -F 32 ${dev}-part2 || fail_ mkfs.vfat failed + + mount_point=$(pwd)/mnt + + mkdir $mount_point || fail=1 +-mount "${dev}p2" "$mount_point" || fail=1 ++mount "${dev}-part2" "$mount_point" || fail=1 + + # Removal of unmounted partition must succeed. + parted -s "$dev" rm 1 > /dev/null 2>&1 || fail=1 +@@ -84,7 +84,7 @@ sed "s,^$dev,DEV," out > k; mv k out + cat <> exp || fail=1 + BYT; + DEV:${n}s:dm:512:512:msdos:Linux device-mapper (linear):; +-2:1001s:200000s:199000s:fat32::lba; ++2:1001s:200000s:199000s:fat32::lba, type=0c; + EOF + + compare exp out || fail=1 +--- a/tests/t9042-dos-partition-limit.sh ++++ b/tests/t9042-dos-partition-limit.sh +@@ -41,7 +41,7 @@ scsi_dev=$(cat dev-name) + n=$((n_MiB * sectors_per_MiB)) + printf '%s\n' "BYT;" \ + "$scsi_dev:${n}s:scsi:$ss:$ss:msdos:Linux scsi_debug:;" \ +- "1:$((start-2))s:$((n-1))s:$((n-start+2))s:::lba;" \ ++ "1:$((start-2))s:$((n-1))s:$((n-start+2))s:::lba, type=0f;" \ + > exp || fail=1 + + parted -s $scsi_dev mklabel msdos || fail=1 +@@ -51,7 +51,7 @@ i=1 + while :; do + end=$((start + partition_sectors - 2)) + parted -s -a min $scsi_dev mkpart logical ${start}s ${end}s || fail=1 +- printf "$((i+4)):${start}s:${end}s:$((end-start+1))s:::;\n" >> exp ++ printf "$((i+4)):${start}s:${end}s:$((end-start+1))s:::type=83;\n" >> exp + test $i = $((n_partitions - 1)) && break + start=$((start + partition_sectors)) + i=$((i+1)) +--- a/tests/t4100-msdos-partition-limits.sh ++++ b/tests/t4100-msdos-partition-limits.sh +@@ -81,7 +81,7 @@ do_mkpart $n $end || fail=1 + # print the result + parted -s $dev unit s p > out 2>&1 || fail=1 + sed -n "/^ *1 *$n/s/ */ /gp" out|sed "s/ *\$//" > k && mv k out || fail=1 +-echo " 1 ${n}s ${end}s 4294967295s primary" > exp || fail=1 ++echo " 1 ${n}s ${end}s 4294967295s primary type=83" > exp || fail=1 + compare exp out || fail=1 + + # a partition length of exactly 2^32 sectors provokes failure. +@@ -121,7 +121,7 @@ Partition Table: $table_type + Disk Flags: + + Number Start End Size Type File system Flags +- 1 4294967295s 4294968294s 1000s primary ++ 1 4294967295s 4294968294s 1000s primary type=83 + + EOF + diff --git a/tests-increase-scsi_debug-tmo.patch b/tests-increase-scsi_debug-tmo.patch new file mode 100644 index 0000000..ce486c8 --- /dev/null +++ b/tests-increase-scsi_debug-tmo.patch @@ -0,0 +1,40 @@ +From: "Brian C. Lane" +Date: Fri, 24 Feb 2017 11:06:20 -0800 +Subject: Increase timeout for rmmod scsi_debug and make it a + framework failure +For: upstream code +Patch-mainline: v3.3 +Git-commit: 40e55a0819862d5dbe2098803735f8c48fb30b6d + +On some hardware scsi_debug can take longer to remove. If this fails it +inevitably results in the next test failing since it cannot load +scsi_debug. + +Increse the timeout to 40 loops (8 seconds), and if it hits the limit +without succeeding call framework_failure_ + +Acked-by: Sebastian Parschauer +--- + tests/t-local.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/tests/t-local.sh b/tests/t-local.sh +index 5655e0f..fb6a7e3 100644 +--- a/tests/t-local.sh ++++ b/tests/t-local.sh +@@ -27,13 +27,14 @@ scsi_debug_cleanup_() + # "Module scsi_debug is in use". + i=0 + udevadm settle +- while [ $i -lt 10 ] ; do ++ while [ $i -lt 40 ] ; do + rmmod scsi_debug \ + && { test "$VERBOSE" = yes && warn_ $ME_ rmmod scsi_debug...; break; } + sleep .2 || sleep 1 + i=$((i + 1)) + done + udevadm settle ++ test $i = 40 && framework_failure_ rmmod scsi_debug failed. + fi + rm -fr $scsi_debug_lock_dir_ + } diff --git a/tests-set-optimal-blocks-for-scsi_debug.patch b/tests-set-optimal-blocks-for-scsi_debug.patch new file mode 100644 index 0000000..0eea56b --- /dev/null +++ b/tests-set-optimal-blocks-for-scsi_debug.patch @@ -0,0 +1,30 @@ +From: "Brian C. Lane" +Date: Tue, 23 Aug 2016 08:55:18 -0700 +Subject: tests: Set optimal blocks to 64 for scsi_debug devices +For: upstream code +Patch-mainline: v3.3 +Git-commit: da36186cb4c2c0470a6490aed424a8d51a2b1085 + +The Linux kernel 4.5 changed the optimal blocks count from 64 to 1024 +This causes tests using scsi_debug devices to fail because of alignment +issues. Set the opt_blks to 64 so that we have consistent behavior +across kernels. + +Acked-by: Sebastian Parschauer +--- + tests/t-local.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/t-local.sh b/tests/t-local.sh +index b40a5a0..5655e0f 100644 +--- a/tests/t-local.sh ++++ b/tests/t-local.sh +@@ -97,7 +97,7 @@ scsi_debug_setup_() + # It is not trivial to determine the name of the device we're creating. + # Record the names of all /sys/block/sd* devices *before* probing: + touch stamp +- modprobe scsi_debug "$@" || { rm -f stamp; return 1; } ++ modprobe scsi_debug opt_blks=64 "$@" || { rm -f stamp; return 1; } + scsi_debug_modprobe_succeeded_=1 + test "$VERBOSE" = yes \ + && echo $ME_ modprobe scsi_debug succeeded 1>&2 diff --git a/tests-update-t0220-t0280-for-swap-flag.patch b/tests-update-t0220-t0280-for-swap-flag.patch new file mode 100644 index 0000000..c773528 --- /dev/null +++ b/tests-update-t0220-t0280-for-swap-flag.patch @@ -0,0 +1,45 @@ +From: "Brian C. Lane" +Date: Thu, 22 Dec 2016 16:59:27 -0800 +Subject: tests: Update t0220 and t0280 for the swap flag. +For: libparted-set-swap-flag-on-GPT-partitions.patch +For: parted-mkpart-set-a-swap-flag-if-available.patch +For: libparted-dasd-add-swap-flag-handling-for-DASD-CDL.patch +Patch-mainline: v3.3 +Git-commit: 5a9a49776ee98ca86cfe123b79bbee2279f93961 + +Acked-by: Sebastian Parschauer +--- + tests/t0220-gpt-msftres.sh | 6 +++++- + tests/t0280-gpt-corrupt.sh | 2 +- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/tests/t0220-gpt-msftres.sh b/tests/t0220-gpt-msftres.sh +index 79518ae6b342..6721a470b111 100755 +--- a/tests/t0220-gpt-msftres.sh ++++ b/tests/t0220-gpt-msftres.sh +@@ -56,7 +56,11 @@ printf "BYT;\n$dev:${n_sectors}s:file:$ss:$ss:gpt::;\n" > exp + i=1 + for type in $fs_types; do + end=$(expr $start + $part_size - 1) +- case $type in fat*|NTFS) flag=msftdata;; *) flag=;; esac ++ case $type in ++ fat*|NTFS) flag=msftdata;; ++ linux-swap) flag=swap;; ++ *) flag=;; ++ esac + echo "$i:${start}s:${end}s:${part_size}s::$type:$flag;" >> exp || fail=1 + parted -s $dev mkpart p-name $type ${start}s ${end}s > err 2>&1 || fail=1 + compare /dev/null err || fail=1 +diff --git a/tests/t0280-gpt-corrupt.sh b/tests/t0280-gpt-corrupt.sh +index a7c8d82291e5..1b4d86b094ea 100755 +--- a/tests/t0280-gpt-corrupt.sh ++++ b/tests/t0280-gpt-corrupt.sh +@@ -89,7 +89,7 @@ compare exp err || fail=1 + parted -m -s $dev u s print > out 2>&1 || fail=1 + + # check for expected output +-printf "BYT;\nfile\n1:2048s:4095s:2048s::foo:;\n" > exp || fail=1 ++printf "BYT;\nfile\n1:2048s:4095s:2048s::foo:swap;\n" > exp || fail=1 + sed "s/.*gpt::;/file/" out > k && mv k out || fail=1 + compare exp out || fail=1 + diff --git a/tests-use-wait_for_dev_to_-functions.patch b/tests-use-wait_for_dev_to_-functions.patch new file mode 100644 index 0000000..fbfe5d2 --- /dev/null +++ b/tests-use-wait_for_dev_to_-functions.patch @@ -0,0 +1,185 @@ +From: "Brian C. Lane" +Date: Fri, 7 Aug 2015 11:43:17 -0700 +Subject: tests: Use wait_for_dev_to_ functions +For: upstream code +Patch-mainline: v3.3 +Git-commit: db1728e6402a27fe64e8e132f810c22160ab8bcc + +Recent changes to udev have made some long-standing problems appear more +frequently. udev executes various actions when changes are made to +devices. Sometimes this can result in device nodes not appearing +immediately. Other times it can result in EBUSY being returned. This +patch only addresses devices that are slow to appear/disappear. + +It is best to use the wait_for_dev_to_appear_ and +wait_for_dev_to_disappear_ functions than to test for existance. These +will loop and wait for up to 2 seconds for it to appear. + +This also changes t9041 to fail if mkfs doesn't work since using skip +here may hide cases when the device node doesn't appear. + +[sparschauer: remove hunks for non-existing tests] +Signed-off-by: Sebastian Parschauer +--- + tests/t1100-busy-label.sh | 10 ++-------- + tests/t1102-loop-label.sh | 25 +++++-------------------- + tests/t2320-dos-extended-noclobber.sh | 1 + + tests/t6001-psep.sh | 4 ++-- + tests/t6004-dm-many-partitions.sh | 6 ++---- + tests/t6006-dm-512b-sectors.sh | 1 + + tests/t6100-mdraid-partitions.sh | 5 +++-- + tests/t9041-undetected-in-use-16th-partition.sh | 2 +- + 8 files changed, 17 insertions(+), 37 deletions(-) + +diff --git a/tests/t1100-busy-label.sh b/tests/t1100-busy-label.sh +index 4e256d32a010..70e8edec8a60 100755 +--- a/tests/t1100-busy-label.sh ++++ b/tests/t1100-busy-label.sh +@@ -27,22 +27,16 @@ dev=$(cat dev-name) + + parted -s "$dev" mklabel msdos mkpart primary fat32 1 40 > out 2>&1 || fail=1 + compare /dev/null out || fail=1 +-mkfs.vfat ${dev}1 || skip_ "mkfs.vfat failed" ++wait_for_dev_to_appear_ ${dev}1 || fail=1 ++mkfs.vfat ${dev}1 || fail=1 + + mount_point="`pwd`/mnt" + + # Be sure to unmount upon interrupt, failure, etc. + cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; } + +-# There's a race condition here: on udev-based systems, the partition#1 +-# device, ${dev}1 (i.e., /dev/sdd1) is not created immediately, and +-# without some delay, this mount command would fail. Using a flash card +-# as $dev, the loop below typically iterates 7-20 times. +- + # create mount point dir. and mount the just-created partition on it + mkdir $mount_point || fail=1 +-i=0; while :; do test -e "${dev}1" && break; test $i = 90 && break; +- i=$(expr $i + 1); done; + mount "${dev}1" $mount_point || fail=1 + + # now that a partition is mounted, mklabel attempt must fail +diff --git a/tests/t1102-loop-label.sh b/tests/t1102-loop-label.sh +index 97520021004d..68b9af45b428 100644 +--- a/tests/t1102-loop-label.sh ++++ b/tests/t1102-loop-label.sh +@@ -44,15 +44,9 @@ mv out o2 && sed -e "s,$dev,DEVICE,;s/ *$//" o2 > out + + compare exp out || fail=1 + parted -s $dev rm 1 || fail=1 +-if [ -e ${dev}1 ]; then +- echo "Partition should not exist on loop device" +- fail=1 +-fi ++wait_for_dev_to_disappear_ ${dev}1 2 || fail=1 + partprobe $dev || fail=1 +-if [ -e ${dev}1 ]; then +- echo "Partition should not exist on loop device" +- fail=1 +-fi ++wait_for_dev_to_disappear_ ${dev}1 2 || fail=1 + + mount_point="`pwd`/mnt" + +@@ -80,24 +74,15 @@ umount "$mount_point" + + # make sure partprobe cleans up stale partition devices + parted -s $dev mklabel msdos mkpart primary ext2 0% 100% || fail=1 +-if [ ! -e ${dev}1 ]; then +- echo "Partition doesn't exist on loop device" +- fail=1 +-fi ++wait_for_dev_to_appear_ ${dev}1 || fail=1 + + mke2fs -F $dev + partprobe $dev || fail=1 +-if [ -e ${dev}1 ]; then +- echo "Partition should not exist on loop device" +- fail=1 +-fi ++wait_for_dev_to_disappear_ ${dev}1 2 || fail=1 + + # make sure new loop label removes old partitions > 1 + parted -s $dev mklabel msdos mkpart primary ext2 0% 50% mkpart primary ext2 50% 100% || fail=1 + parted -s $dev mklabel loop || fail=1 +-if [ -e ${dev}2 ]; then +- echo "Partition 2 not removed" +- fail=1 +-fi ++wait_for_dev_to_disappear_ ${dev}2 2 || fail=1 + + Exit $fail +diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh +index f15090abb3e7..4c758e8fbc73 100644 +--- a/tests/t6001-psep.sh ++++ b/tests/t6001-psep.sh +@@ -54,7 +54,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1 + compare /dev/null out || fail=1 + + #make sure device name is correct +-test -e ${dev}p1 || fail=1 ++wait_for_dev_to_appear_ ${dev}p1 || fail=1 + + #repeat on name not ending in a digit + # setup: create a mapping +@@ -66,7 +66,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1 + compare /dev/null out || fail=1 + + #make sure device name is correct +-test -e ${dev}1 || fail=1 ++wait_for_dev_to_appear_ ${dev}1 || fail=1 + + if [ -n "$fail" ]; then + ls /dev/mapper +diff --git a/tests/t6004-dm-many-partitions.sh b/tests/t6004-dm-many-partitions.sh +index 8d291ef55664..7ebc48a18db8 100755 +--- a/tests/t6004-dm-many-partitions.sh ++++ b/tests/t6004-dm-many-partitions.sh +@@ -49,10 +49,8 @@ parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fa + + # Make sure all the partitions appeared under /dev/mapper/ + for ((i=1; i<=$n_partitions; i+=1)); do +- if [ ! -e "/dev/mapper/${dm_name}p$i" ]; then +- fail=1 +- break +- fi ++ wait_for_dev_to_appear_ "/dev/mapper/${dm_name}p$i" || { fail=1; break; } ++ + # remove the partitions as we go, otherwise cleanup won't work. + dmsetup remove /dev/mapper/${dm_name}p$i + done +diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh +index 6f08442dd66d..dbc5986b9019 100755 +--- a/tests/t6100-mdraid-partitions.sh ++++ b/tests/t6100-mdraid-partitions.sh +@@ -54,13 +54,14 @@ parted -s $md_dev mklabel gpt \ + compare /dev/null out || fail=1 + + # Verify that kernel has been informed about the second device. +-grep "${md_name}p2" /proc/partitions || { fail=1; cat /proc/partitions; } ++wait_for_dev_to_appear_ ${md_dev}p2 || { fail=1; cat /proc/partitions; } + + # Remove partitions from the raid device. + parted -s $md_dev rm 2 rm 1 > out 2>&1 || fail=1 + compare /dev/null out || fail=1 + + # Verify that kernel has been informed about those removals. +-grep "${md_name}p[12]" /proc/partitions && { fail=1; cat /proc/partitions; } ++wait_for_dev_to_disappear_ ${md_dev}p1 2 || { fail=1; cat /proc/partitions; } ++wait_for_dev_to_disappear_ ${md_dev}p2 2 || { fail=1; cat /proc/partitions; } + + Exit $fail +diff --git a/tests/t9041-undetected-in-use-16th-partition.sh b/tests/t9041-undetected-in-use-16th-partition.sh +index edaae1bf8116..673e508319a3 100644 +--- a/tests/t9041-undetected-in-use-16th-partition.sh ++++ b/tests/t9041-undetected-in-use-16th-partition.sh +@@ -72,7 +72,7 @@ wait_for_dev_to_appear_ ${scsi_dev}16 || fail_ ${scsi_dev}16 did not appear + + partitions="${scsi_dev}14 ${scsi_dev}15 ${scsi_dev}16" + for i in $partitions; do +- mkfs.ext3 $i || skip_ mkfs.ext3 $i failed ++ mkfs.ext3 $i || fail=1 + done + + # be sure to unmount upon interrupt, failure, etc. diff --git a/tests-wait_for_-loop.patch b/tests-wait_for_-loop.patch new file mode 100644 index 0000000..dc763a7 --- /dev/null +++ b/tests-wait_for_-loop.patch @@ -0,0 +1,119 @@ +From: "Brian C. Lane" +Date: Tue, 1 Mar 2016 10:38:26 -0800 +Subject: tests: Add udevadm settle to wait_for_ loop (#1260664) +For: upstream code +Patch-mainline: v3.3 +Git-commit: f5cc84cdb5a607449c339cad50fe8be5dd77eb6c + +Sometimes the device will vanish after the wait_for_dev_to_appear exits. +Add udevadm settle in an attempt to make sure the udev system is done +flapping around and the device will stay in place. + +Related: rhbz#1260664 +Acked-by: Sebastian Parschauer +--- + tests/t-lib-helpers.sh | 2 ++ + tests/t-local.sh | 2 ++ + tests/t6001-psep.sh | 2 ++ + tests/t6004-dm-many-partitions.sh | 1 + + tests/t6005-dm-uuid.sh | 2 ++ + tests/t6100-mdraid-partitions.sh | 1 + + 6 files changed, 10 insertions(+) + +diff --git a/tests/t-lib-helpers.sh b/tests/t-lib-helpers.sh +index c8684bbd264e..93123432922b 100644 +--- a/tests/t-lib-helpers.sh ++++ b/tests/t-lib-helpers.sh +@@ -377,6 +377,7 @@ wait_for_dev_to_appear_() + local i=0 + local incr=1 + while :; do ++ udevadm settle + ls "$file" > /dev/null 2>&1 && return 0 + sleep .1 2>/dev/null || { sleep 1; incr=10; } + i=$(expr $i + $incr); test $i = 20 && break +@@ -392,6 +393,7 @@ wait_for_dev_to_disappear_() + local i=0 + local incr=1 + while :; do ++ udevadm settle + ls "$file" > /dev/null 2>&1 || return 0 + sleep .1 2>/dev/null || { sleep 1; incr=10; } + i=$(expr $i + $incr); test $i -ge $(expr $n_sec \* 10) && break +diff --git a/tests/t-local.sh b/tests/t-local.sh +index b40a5a0ebbf5..a7d5226a3956 100644 +--- a/tests/t-local.sh ++++ b/tests/t-local.sh +@@ -47,6 +47,7 @@ wait_for_dev_to_appear_() + local i=0 + local incr=1 + while :; do ++ udevadm settle + ls "$file" > /dev/null 2>&1 && return 0 + sleep .1 2>/dev/null || { sleep 1; incr=10; } + i=$(expr $i + $incr); test $i = 20 && break +@@ -110,6 +111,7 @@ scsi_debug_setup_() + local i=0 + local new_dev + while :; do ++ udevadm settle + new_dev=$(new_sdX_) && break + sleep .1 2>/dev/null || { sleep 1; incr=10; } + i=$(expr $i + $incr); test $i = 20 && break +diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh +index 4c758e8fbc73..2985cf5e7d0e 100644 +--- a/tests/t6001-psep.sh ++++ b/tests/t6001-psep.sh +@@ -19,6 +19,8 @@ + . "${srcdir=.}/init.sh"; path_prepend_ ../parted + + require_root_ ++require_udevadm_settle_ ++ + (dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed" + + # Device maps names - should be random to not conflict with existing ones on +diff --git a/tests/t6004-dm-many-partitions.sh b/tests/t6004-dm-many-partitions.sh +index 7ebc48a18db8..01d7fc0da8f3 100755 +--- a/tests/t6004-dm-many-partitions.sh ++++ b/tests/t6004-dm-many-partitions.sh +@@ -20,6 +20,7 @@ + . "${srcdir=.}/init.sh"; path_prepend_ ../parted + + require_root_ ++require_udevadm_settle_ + (dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed" + + ss=$sector_size_ +diff --git a/tests/t6005-dm-uuid.sh b/tests/t6005-dm-uuid.sh +index ce1251a9f16a..a48ae727f940 100755 +--- a/tests/t6005-dm-uuid.sh ++++ b/tests/t6005-dm-uuid.sh +@@ -20,6 +20,7 @@ + . "${srcdir=.}/init.sh"; path_prepend_ ../parted + + require_root_ ++require_udevadm_settle_ + (dmsetup --help) > /dev/null 2>&1 || skip_test_ "No dmsetup installed" + + ss=$sector_size_ +@@ -46,6 +47,7 @@ for ((i=1; i<=$n_partitions; i+=1)); do + cmd="$cmd mkpart p$i ${s}s ${s}s" + done + parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fail=1 ++wait_for_dev_to_appear_ /dev/mapper/${dm_name}p${n_partitions} || fail=1 + + # Make sure all the partitions have UUIDs + for ((i=1; i<=$n_partitions; i+=1)); do +diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh +index dbc5986b9019..dbb16861f9f3 100755 +--- a/tests/t6100-mdraid-partitions.sh ++++ b/tests/t6100-mdraid-partitions.sh +@@ -38,6 +38,7 @@ parted -s "$scsi_dev" mklabel gpt \ + mkpart p1 ext2 1M 4M \ + mkpart p2 ext2 5M 8M > out 2>&1 || fail=1 + compare /dev/null out || fail=1 ++wait_for_dev_to_appear_ ${scsi_dev}2 || { fail=1; cat /proc/partitions; } + + cleanup_fn_() { + # stop mdraid array