summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2021-03-23 01:16:21 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2021-03-23 01:16:21 +0100
commit370749a4b859dae834ca5ce514a701a3c3abc75b (patch)
tree8aaf291d87ba83b4d0d5c0971ed33351fedaa6c3
parent7575c7ae5c012c4a20bd4c2563640880f522789c (diff)
downloadlvm2-370749a4b859dae834ca5ce514a701a3c3abc75b.tar.gz
tests: enhance mdadm_create
For older mdadm its hard to support new names - to simplify things keep using /dev/mdXXX name which is automatically selected.
-rw-r--r--test/lib/aux.sh67
1 files changed, 31 insertions, 36 deletions
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
index e26aa9912..a982ca162 100644
--- a/test/lib/aux.sh
+++ b/test/lib/aux.sh
@@ -710,26 +710,22 @@ cleanup_scsi_debug_dev() {
}
mdadm_create() {
+ local devid
local mddev
- local maj=
- local mdname="md_lvm_test0"
- local mddir="md/"
- local mddevdir="$DM_DEV_DIR/$mddir"
- maj=$(mdadm --version 2>&1) || skip "mdadm tool is missing!"
+ which mdadm >/dev/null || skip "mdadm tool is missing!"
cleanup_md_dev
rm -f debug.log strace.log
- # Have MD use a non-standard name to avoid colliding with an existing MD device
- # - mdadm >= 3.0 requires that non-standard device names be in /dev/md/
- # - newer mdadm _completely_ defers to udev to create the associated device node
- maj=${maj##*- v}
- maj=${maj%%.*}
- [ "$maj" -ge 3 ] || mddir=""
-
- mddev="/dev/${mddir}$mdname"
- name=$1
+ # try to find free MD node
+ # using the old naming /dev/mdXXX
+ # if we need more MD arrays test suite more likely leaked them
+ for devid in {127..150} ; do
+ test -b /dev/md${devid} || break
+ done
+ test "$devid" -lt "150" || skip "Cannot find free /dev/mdXXX node!"
+ mddev=/dev/md${devid}
mdadm --create "$mddev" "$@" || {
# Some older 'mdadm' version managed to open and close devices internaly
@@ -756,18 +752,17 @@ mdadm_create() {
sleep .5
done
+ test -b "$mddev" || skip "mdadm has not created device!"
+ echo "$mddev" > MD_DEV
+
# LVM/DM will see this device
case "$DM_DEV_DIR" in
- "/dev") readlink -f "$mddev" > MD_DEV_PV ;;
- *) mkdir -p "$mddevdir"
- rm -f "$mddevdir/$mdname"
- cp -LR "$mddev" "$mddevdir"
- echo "${mddevdir}${mdname}" > MD_DEV_PV ;;
+ "/dev") echo "$mddev" > MD_DEV_PV ;;
+ *) rm -f "$DM_DEV_DIR/md${devid}"
+ cp -LR "$mddev" "$DM_DEV_DIR"
+ echo "${DM_DEV_DIR}/md${devid}" > MD_DEV_PV ;;
esac
- mddev=$(readlink -f "$mddev")
- test -b "$mddev" || skip "mdadm has not created device!"
- echo "$mddev" > MD_DEV
rm -f MD_DEVICES
while [ "$#" -ne 0 ] ; do
case "$1" in
@@ -778,28 +773,28 @@ mdadm_create() {
}
cleanup_md_dev() {
- test -f MD_DEV || return 0
- grep -q "$(basename $(< MD_DEV) )" /proc/mdstat || {
- rm -f MD_DEV
- return 0
- }
-
local IFS=$IFS_NL
+ local i
local dev
+ local base
local mddev
- local mddev_pv
+
+ test -f MD_DEV || return 0
mddev=$(< MD_DEV)
- mddev_pv=$(< MD_DEV_PV)
+ base=$(basename "$mddev")
- for i in {10..0} ; do
- udev_wait
+ for i in {0..10} ; do
+ grep -q "$base" /proc/mdstat || break
+ test "$i" = 0 || {
+ sleep .1
+ echo "$mddev is still present, stopping again"
+ }
mdadm --stop "$mddev" || true
udev_wait # wait till events are process, not zeroing to early
- grep -q "$(basename $(< MD_DEV) )" /proc/mdstat || break
- sleep .1
- echo "$mddev is still present, stopping again"
done
- test "$DM_DEV_DIR" != "/dev" && rm -rf "${mddev_pv%/*}"
+
+ test "$DM_DEV_DIR" != "/dev" && rm -f "$(< MD_DEV_PV)"
+
for dev in $(< MD_DEVICES); do
mdadm --zero-superblock "$dev" || true
done