Blame SOURCES/0020-tests-Use-wait_for_dev_to_-functions.patch

7fd79c
From f72968f996372d923dbeded302395d8f08445b31 Mon Sep 17 00:00:00 2001
7fd79c
From: "Brian C. Lane" <bcl@redhat.com>
7fd79c
Date: Fri, 7 Aug 2015 11:43:17 -0700
7fd79c
Subject: [PATCH 20/20] tests: Use wait_for_dev_to_ functions
7fd79c
7fd79c
Recent changes to udev have made some long-standing problems appear more
7fd79c
frequently. udev executes various actions when changes are made to
7fd79c
devices. Sometimes this can result in device nodes not appearing
7fd79c
immediately. Other times it can result in EBUSY being returned. This
7fd79c
patch only addresses devices that are slow to appear/disappear.
7fd79c
7fd79c
It is best to use the wait_for_dev_to_appear_ and
7fd79c
wait_for_dev_to_disappear_ functions than to test for existance. These
7fd79c
will loop and wait for up to 2 seconds for it to appear.
7fd79c
7fd79c
This also changes t9041 to fail if mkfs doesn't work since using skip
7fd79c
here may hide cases when the device node doesn't appear.
7fd79c
7fd79c
(cherry picked from commit 1dc13965e1108ab513662450e0171c3ea3af3bd1)
7fd79c
---
7fd79c
 tests/t1100-busy-label.sh                       | 10 ++--------
7fd79c
 tests/t1102-loop-label.sh                       | 25 +++++--------------------
7fd79c
 tests/t2320-dos-extended-noclobber.sh           |  1 +
7fd79c
 tests/t6001-psep.sh                             |  4 ++--
7fd79c
 tests/t6004-dm-many-partitions.sh               |  6 ++----
7fd79c
 tests/t6006-dm-512b-sectors.sh                  |  1 +
7fd79c
 tests/t6100-mdraid-partitions.sh                |  5 +++--
7fd79c
 tests/t9041-undetected-in-use-16th-partition.sh |  2 +-
7fd79c
 8 files changed, 17 insertions(+), 37 deletions(-)
7fd79c
7fd79c
diff --git a/tests/t1100-busy-label.sh b/tests/t1100-busy-label.sh
7fd79c
index 4e256d3..70e8ede 100755
7fd79c
--- a/tests/t1100-busy-label.sh
7fd79c
+++ b/tests/t1100-busy-label.sh
7fd79c
@@ -27,22 +27,16 @@ dev=$(cat dev-name)
7fd79c
 
7fd79c
 parted -s "$dev" mklabel msdos mkpart primary fat32 1 40 > out 2>&1 || fail=1
7fd79c
 compare /dev/null out || fail=1
7fd79c
-mkfs.vfat ${dev}1 || skip_ "mkfs.vfat failed"
7fd79c
+wait_for_dev_to_appear_ ${dev}1 || fail=1
7fd79c
+mkfs.vfat ${dev}1 || fail=1
7fd79c
 
7fd79c
 mount_point="`pwd`/mnt"
7fd79c
 
7fd79c
 # Be sure to unmount upon interrupt, failure, etc.
7fd79c
 cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; }
7fd79c
 
7fd79c
-# There's a race condition here: on udev-based systems, the partition#1
7fd79c
-# device, ${dev}1 (i.e., /dev/sdd1) is not created immediately, and
7fd79c
-# without some delay, this mount command would fail.  Using a flash card
7fd79c
-# as $dev, the loop below typically iterates 7-20 times.
7fd79c
-
7fd79c
 # create mount point dir. and mount the just-created partition on it
7fd79c
 mkdir $mount_point || fail=1
7fd79c
-i=0; while :; do test -e "${dev}1" && break; test $i = 90 && break;
7fd79c
-  i=$(expr $i + 1); done;
7fd79c
 mount "${dev}1" $mount_point || fail=1
7fd79c
 
7fd79c
 # now that a partition is mounted, mklabel attempt must fail
7fd79c
diff --git a/tests/t1102-loop-label.sh b/tests/t1102-loop-label.sh
7fd79c
index 9752002..68b9af4 100644
7fd79c
--- a/tests/t1102-loop-label.sh
7fd79c
+++ b/tests/t1102-loop-label.sh
7fd79c
@@ -44,15 +44,9 @@ mv out o2 && sed -e "s,$dev,DEVICE,;s/  *$//" o2 > out
7fd79c
 
7fd79c
 compare exp out || fail=1
7fd79c
 parted -s $dev rm 1 || fail=1
7fd79c
-if [ -e ${dev}1 ]; then
7fd79c
-    echo "Partition should not exist on loop device"
7fd79c
-    fail=1
7fd79c
-fi
7fd79c
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
7fd79c
 partprobe $dev || fail=1
7fd79c
-if [ -e ${dev}1 ]; then
7fd79c
-    echo "Partition should not exist on loop device"
7fd79c
-    fail=1
7fd79c
-fi
7fd79c
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
7fd79c
 
7fd79c
 mount_point="`pwd`/mnt"
7fd79c
 
7fd79c
@@ -80,24 +74,15 @@ umount "$mount_point"
7fd79c
 
7fd79c
 # make sure partprobe cleans up stale partition devices
7fd79c
 parted -s $dev mklabel msdos mkpart primary ext2 0% 100% || fail=1
7fd79c
-if [ ! -e ${dev}1 ]; then
7fd79c
-    echo "Partition doesn't exist on loop device"
7fd79c
-    fail=1
7fd79c
-fi
7fd79c
+wait_for_dev_to_appear_ ${dev}1 || fail=1
7fd79c
 
7fd79c
 mke2fs -F $dev
7fd79c
 partprobe $dev || fail=1
7fd79c
-if [ -e ${dev}1 ]; then
7fd79c
-    echo "Partition should not exist on loop device"
7fd79c
-    fail=1
7fd79c
-fi
7fd79c
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
7fd79c
 
7fd79c
 # make sure new loop label removes old partitions > 1
7fd79c
 parted -s $dev mklabel msdos mkpart primary ext2 0% 50% mkpart primary ext2 50% 100% || fail=1
7fd79c
 parted -s $dev mklabel loop || fail=1
7fd79c
-if [ -e ${dev}2 ]; then
7fd79c
-    echo "Partition 2 not removed"
7fd79c
-    fail=1
7fd79c
-fi
7fd79c
+wait_for_dev_to_disappear_ ${dev}2 2 || fail=1
7fd79c
 
7fd79c
 Exit $fail
7fd79c
diff --git a/tests/t2320-dos-extended-noclobber.sh b/tests/t2320-dos-extended-noclobber.sh
7fd79c
index 6f3dfff..bbc4f26 100644
7fd79c
--- a/tests/t2320-dos-extended-noclobber.sh
7fd79c
+++ b/tests/t2320-dos-extended-noclobber.sh
7fd79c
@@ -32,6 +32,7 @@ scsi_dev=$(cat dev-name)
7fd79c
 parted -s $scsi_dev mklabel msdos || fail=1
7fd79c
 parted -s $scsi_dev mkpart extended 1 5 > out 2>&1 || fail=1
7fd79c
 parted -s $scsi_dev mkpart primary 5 10 > out 2>&1 || fail=1
7fd79c
+wait_for_dev_to_appear_ ${scsi_dev}1 || fail=1
7fd79c
 
7fd79c
 # Make sure the size of the extended partition is correct.
7fd79c
 # 2 sectors for 512b and 1 sector for larger. /sys/.../size is in
7fd79c
diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh
7fd79c
index f15090a..4c758e8 100644
7fd79c
--- a/tests/t6001-psep.sh
7fd79c
+++ b/tests/t6001-psep.sh
7fd79c
@@ -54,7 +54,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
7fd79c
 compare /dev/null out || fail=1
7fd79c
 
7fd79c
 #make sure device name is correct
7fd79c
-test -e ${dev}p1 || fail=1
7fd79c
+wait_for_dev_to_appear_ ${dev}p1 || fail=1
7fd79c
 
7fd79c
 #repeat on name not ending in a digit
7fd79c
 # setup: create a mapping
7fd79c
@@ -66,7 +66,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
7fd79c
 compare /dev/null out || fail=1
7fd79c
 
7fd79c
 #make sure device name is correct
7fd79c
-test -e ${dev}1 || fail=1
7fd79c
+wait_for_dev_to_appear_ ${dev}1 || fail=1
7fd79c
 
7fd79c
 if [ -n "$fail" ]; then
7fd79c
     ls /dev/mapper
7fd79c
diff --git a/tests/t6004-dm-many-partitions.sh b/tests/t6004-dm-many-partitions.sh
7fd79c
index 8d291ef..7ebc48a 100755
7fd79c
--- a/tests/t6004-dm-many-partitions.sh
7fd79c
+++ b/tests/t6004-dm-many-partitions.sh
7fd79c
@@ -49,10 +49,8 @@ parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fa
7fd79c
 
7fd79c
 # Make sure all the partitions appeared under /dev/mapper/
7fd79c
 for ((i=1; i<=$n_partitions; i+=1)); do
7fd79c
-    if [ ! -e "/dev/mapper/${dm_name}p$i" ]; then
7fd79c
-        fail=1
7fd79c
-        break
7fd79c
-    fi
7fd79c
+    wait_for_dev_to_appear_ "/dev/mapper/${dm_name}p$i" || { fail=1; break; }
7fd79c
+
7fd79c
     # remove the partitions as we go, otherwise cleanup won't work.
7fd79c
     dmsetup remove /dev/mapper/${dm_name}p$i
7fd79c
 done
7fd79c
diff --git a/tests/t6006-dm-512b-sectors.sh b/tests/t6006-dm-512b-sectors.sh
7fd79c
index 31abba9..c3045af 100644
7fd79c
--- a/tests/t6006-dm-512b-sectors.sh
7fd79c
+++ b/tests/t6006-dm-512b-sectors.sh
7fd79c
@@ -60,6 +60,7 @@ dev="/dev/mapper/$linear_"
7fd79c
 # Create msdos partition table with a partition from 1MiB to 100MiB
7fd79c
 parted -s $dev mklabel msdos mkpart primary ext2 1MiB 101MiB > out 2>&1 || fail=1
7fd79c
 compare /dev/null out || fail=1
7fd79c
+wait_for_dev_to_appear_ ${dev}1 || fail=1
7fd79c
 
7fd79c
 # The size of the partition should be 100MiB, or 204800 512b sectors
7fd79c
 p1_size=$(blockdev --getsz ${dev}1) || framework_failure
7fd79c
diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh
7fd79c
index 6f08442..dbc5986 100755
7fd79c
--- a/tests/t6100-mdraid-partitions.sh
7fd79c
+++ b/tests/t6100-mdraid-partitions.sh
7fd79c
@@ -54,13 +54,14 @@ parted -s $md_dev mklabel gpt \
7fd79c
 compare /dev/null out || fail=1
7fd79c
 
7fd79c
 # Verify that kernel has been informed about the second device.
7fd79c
-grep "${md_name}p2" /proc/partitions || { fail=1; cat /proc/partitions; }
7fd79c
+wait_for_dev_to_appear_ ${md_dev}p2 || { fail=1; cat /proc/partitions; }
7fd79c
 
7fd79c
 # Remove partitions from the raid device.
7fd79c
 parted -s $md_dev rm 2 rm 1 > out 2>&1 || fail=1
7fd79c
 compare /dev/null out || fail=1
7fd79c
 
7fd79c
 # Verify that kernel has been informed about those removals.
7fd79c
-grep "${md_name}p[12]" /proc/partitions && { fail=1; cat /proc/partitions; }
7fd79c
+wait_for_dev_to_disappear_ ${md_dev}p1 2 || { fail=1; cat /proc/partitions; }
7fd79c
+wait_for_dev_to_disappear_ ${md_dev}p2 2 || { fail=1; cat /proc/partitions; }
7fd79c
 
7fd79c
 Exit $fail
7fd79c
diff --git a/tests/t9041-undetected-in-use-16th-partition.sh b/tests/t9041-undetected-in-use-16th-partition.sh
7fd79c
index edaae1b..673e508 100644
7fd79c
--- a/tests/t9041-undetected-in-use-16th-partition.sh
7fd79c
+++ b/tests/t9041-undetected-in-use-16th-partition.sh
7fd79c
@@ -72,7 +72,7 @@ wait_for_dev_to_appear_ ${scsi_dev}16 || fail_ ${scsi_dev}16 did not appear
7fd79c
 
7fd79c
 partitions="${scsi_dev}14 ${scsi_dev}15 ${scsi_dev}16"
7fd79c
 for i in $partitions; do
7fd79c
-  mkfs.ext3 $i || skip_ mkfs.ext3 $i failed
7fd79c
+  mkfs.ext3 $i || fail=1
7fd79c
 done
7fd79c
 
7fd79c
 # be sure to unmount upon interrupt, failure, etc.
7fd79c
-- 
7fd79c
2.4.3
7fd79c