summaryrefslogtreecommitdiff
path: root/test/shell/pvmove-basic.sh
diff options
context:
space:
mode:
authorKarol Lewandowski <k.lewandowsk@samsung.com>2024-01-23 12:58:00 +0100
committerKarol Lewandowski <k.lewandowsk@samsung.com>2024-01-23 12:58:00 +0100
commitcbab226a74fbaaa43220dee80e8435555c6506ce (patch)
tree1bbd14ec625ea85d0bcc32232d51c1f71e2604d2 /test/shell/pvmove-basic.sh
parent44a3c2255bc480c82f34db156553a595606d8a0b (diff)
downloaddevice-mapper-sandbox/klewandowski/upstream_2.03.22.tar.gz
device-mapper-sandbox/klewandowski/upstream_2.03.22.tar.bz2
device-mapper-sandbox/klewandowski/upstream_2.03.22.zip
Diffstat (limited to 'test/shell/pvmove-basic.sh')
-rw-r--r--test/shell/pvmove-basic.sh402
1 files changed, 191 insertions, 211 deletions
diff --git a/test/shell/pvmove-basic.sh b/test/shell/pvmove-basic.sh
index e95fc36..c02354d 100644
--- a/test/shell/pvmove-basic.sh
+++ b/test/shell/pvmove-basic.sh
@@ -1,5 +1,6 @@
-#!/bin/sh
-# Copyright (C) 2008-2012 Red Hat, Inc. All rights reserved.
+#!/usr/bin/env bash
+
+# Copyright (C) 2008-2013 Red Hat, Inc. All rights reserved.
# Copyright (C) 2007 NEC Corporation
#
# This copyrighted material is made available to anyone wishing to use,
@@ -8,94 +9,84 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
test_description="ensure that pvmove works with basic options"
-. lib/test
+SKIP_WITH_LVMLOCKD=1
+
+. lib/inittest
-which mkfs.ext2 || skip
which md5sum || skip
# ---------------------------------------------------------------------
# Utilities
-lvdev_() {
- echo "$DM_DEV_DIR/$1/$2"
+create_vg_() {
+ vgcreate -s 128k "$vg" "${DEVICES[@]}"
}
-lv_is_on_() {
- local lv=$1 #allready vg/lv
- shift 1
- lvs -a -odevices --noheadings $lv | sed 's/,/\n/g' > out
-#is on all specified devs
- for d in $*; do grep "$d(" out; done
-#isn't on any other dev (we are set -e remember)
- for d in $*; do ! grep -v "$d(" out; done
- return 0
+# ---------------------------------------------------------------------
+# Common environment setup/cleanup for each sub testcases
+prepare_lvs_() {
+ lvcreate -aey -l2 -n $lv1 $vg "$dev1"
+ check lv_on $vg $lv1 "$dev1"
+ lvcreate -aey -l9 -i3 -n $lv2 $vg "$dev2" "$dev3" "$dev4"
+ check lv_on $vg $lv2 "$dev2" "$dev3" "$dev4"
+ lvextend -l+2 $vg/$lv1 "$dev2"
+ check lv_on $vg $lv1 "$dev1" "$dev2"
+ lvextend -l+2 $vg/$lv1 "$dev3"
+ lvextend -l+2 $vg/$lv1 "$dev1"
+ check lv_on $vg $lv1 "$dev1" "$dev2" "$dev3"
+ lvcreate -aey -l1 -n $lv3 $vg "$dev2"
+ check lv_on $vg $lv3 "$dev2"
+ aux mkdev_md5sum $vg $lv1
+ aux mkdev_md5sum $vg $lv2
+ aux mkdev_md5sum $vg $lv3
+ get lv_devices "$vg/$lv1" > "${lv1}_devs"
+ get lv_devices "$vg/$lv2" > "${lv2}_devs"
+ get lv_devices "$vg/$lv3" > "${lv3}_devs"
+ lvs -a -o name,size,seg_pe_ranges $vg
+ vgcfgbackup -f bak-$$ $vg
}
-save_dev_sum_() {
- mkfs.ext2 $1 > /dev/null && md5sum $1 > md5.$(basename $1)
+# Restore metadata content, since data are pvmove-ed
+# original content should be preserved
+restore_lvs_() {
+ vgcfgrestore -f bak-$$ $vg
+ vgchange -aey $vg
}
-check_dev_sum_() {
- md5sum -c md5.$(basename $1)
+lvs_not_changed_() {
+ for i in "${@}"; do
+ get lv_devices "$vg/$i" | tee out
+ diff "${i}_devs" out || \
+ (cat "${i}_devs"; die "Devices for LV $vg/$i differs!")
+ done
}
-create_vg_() {
- vgcreate -c n -s 128k $vg $(cat DEVICES)
+check_and_cleanup_lvs_() {
+ check dev_md5sum $vg $lv1
+ check dev_md5sum $vg $lv2
+ check dev_md5sum $vg $lv3
+ get lv_field $vg name -a >out
+ not grep "^\[pvmove" out
+ vgchange -an $vg
+ lvremove -ff $vg
+ (dm_table | not grep $vg) || \
+ die "ERROR: lvremove did leave some mappings in DM behind!"
}
+
# ---------------------------------------------------------------------
# Initialize PVs and VGs
-#aux prepare_vg 5 30
aux prepare_pvs 5 5
-create_vg_
-
-# ---------------------------------------------------------------------
-# Common environment setup/cleanup for each sub testcases
-FIRST=""
+get_devs
-prepare_lvs_() {
- lvcreate -l2 -n $lv1 $vg "$dev1"
- test -z "$FIRST" && lv_is_on_ $vg/$lv1 "$dev1"
- lvcreate -l9 -i3 -n $lv2 $vg "$dev2" "$dev3" "$dev4"
- test -z "$FIRST" && lv_is_on_ $vg/$lv2 "$dev2" "$dev3" "$dev4"
- lvextend -l+2 $vg/$lv1 "$dev2"
- test -z "$FIRST" && lv_is_on_ $vg/$lv1 "$dev1" "$dev2"
- lvextend -l+2 $vg/$lv1 "$dev3"
- test -z "$FIRST" && lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev3"
- lvextend -l+2 $vg/$lv1 "$dev1"
- test -z "$FIRST" && lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev3" "$dev1"
- lvcreate -l1 -n $lv3 $vg "$dev2"
- test -z "$FIRST" && lv_is_on_ $vg/$lv3 "$dev2"
- save_dev_sum_ $(lvdev_ $vg $lv1)
- save_dev_sum_ $(lvdev_ $vg $lv2)
- save_dev_sum_ $(lvdev_ $vg $lv3)
- if test -z "$FIRST" ; then
- get lv_field $vg/$lv1 devices > ${lv1}_devs
- get lv_field $vg/$lv2 devices > ${lv2}_devs
- get lv_field $vg/$lv3 devices > ${lv3}_devs
- fi
- FIRST=done
-}
-
-lv_not_changed_() {
- get lv_field $1 devices > out
- diff $(basename $1)_devs out
-}
+create_vg_
-check_and_cleanup_lvs_() {
- lvs -a -o+devices $vg
- check_dev_sum_ $(lvdev_ $vg $lv1)
- check_dev_sum_ $(lvdev_ $vg $lv2)
- check_dev_sum_ $(lvdev_ $vg $lv3)
- lvs -a -o name $vg > out && ! grep ^pvmove out
- lvremove -ff $vg
- (dm_table | not grep $vg) || \
- die "ERROR: lvremove did leave some some mappings in DM behind!"
-}
+for mode in "--atomic" ""
+do
#COMM "check environment setup/cleanup"
prepare_lvs_
@@ -108,276 +99,265 @@ check_and_cleanup_lvs_
# filter by LV
#COMM "only specified LV is moved: from pv2 to pv5 only for lv1"
-prepare_lvs_
-pvmove -i1 -n $vg/$lv1 "$dev2" "$dev5"
-lv_is_on_ $vg/$lv1 "$dev1" "$dev5" "$dev3" "$dev1"
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i1 -n $vg/$lv1 "$dev2" "$dev5"
+check lv_on $vg $lv1 "$dev1" "$dev5" "$dev3"
+lvs_not_changed_ $lv2 $lv3
check_and_cleanup_lvs_
# ---
# segments in a LV
#COMM "the 1st seg of 3-segs LV is moved: from pv1 of lv1 to pv4"
-prepare_lvs_
-pvmove -i0 -n $vg/$lv1 "$dev1" "$dev4"
-lv_is_on_ $vg/$lv1 "$dev4" "$dev2" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 -n $vg/$lv1 "$dev1" "$dev4"
+check lv_on $vg $lv1 "$dev4" "$dev2" "$dev3"
+lvs_not_changed_ $lv2 $lv3
check_and_cleanup_lvs_
#COMM "the 2nd seg of 3-segs LV is moved: from pv2 of lv1 to pv4"
-prepare_lvs_
-pvmove -i0 -n $vg/$lv1 "$dev2" "$dev4"
-lv_is_on_ $vg/$lv1 "$dev1" "$dev4" "$dev3" "$dev1"
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 -n $vg/$lv1 "$dev2" "$dev4"
+check lv_on $vg $lv1 "$dev1" "$dev4" "$dev3"
+lvs_not_changed_ $lv2 $lv3
check_and_cleanup_lvs_
#COMM "the 3rd seg of 3-segs LV is moved: from pv3 of lv1 to pv4"
-prepare_lvs_
-pvmove -i0 -n $vg/$lv1 "$dev3" "$dev4"
-lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev4" "$dev1"
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 -n $vg/$lv1 "$dev3" "$dev4"
+check lv_on $vg $lv1 "$dev1" "$dev2" "$dev4"
+lvs_not_changed_ $lv2 $lv3
check_and_cleanup_lvs_
# ---
# multiple LVs matching
#COMM "1 out of 3 LVs is moved: from pv4 to pv5"
-prepare_lvs_
-pvmove -i0 "$dev4" "$dev5"
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev2" "$dev3" "$dev5"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 "$dev4" "$dev5"
+check lv_on $vg $lv2 "$dev2" "$dev3" "$dev5"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
#COMM "2 out of 3 LVs are moved: from pv3 to pv5"
-prepare_lvs_
-pvmove -i0 "$dev3" "$dev5"
-lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev5" "$dev1"
-lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 "$dev3" "$dev5"
+check lv_on $vg $lv1 "$dev1" "$dev2" "$dev5"
+check lv_on $vg $lv2 "$dev2" "$dev5" "$dev4"
+lvs_not_changed_ $lv3
check_and_cleanup_lvs_
#COMM "3 out of 3 LVs are moved: from pv2 to pv5"
-prepare_lvs_
-pvmove -i0 "$dev2" "$dev5"
-lv_is_on_ $vg/$lv1 "$dev1" "$dev5" "$dev3" "$dev1"
-lv_is_on_ $vg/$lv2 "$dev5" "$dev3" "$dev4"
-lv_is_on_ $vg/$lv3 "$dev5"
+restore_lvs_
+pvmove $mode -i0 "$dev2" "$dev5"
+check lv_on $vg $lv1 "$dev1" "$dev5" "$dev3"
+check lv_on $vg $lv2 "$dev5" "$dev3" "$dev4"
+check lv_on $vg $lv3 "$dev5"
check_and_cleanup_lvs_
# ---
# areas of striping
#COMM "move the 1st stripe: from pv2 of lv2 to pv1"
-prepare_lvs_
-pvmove -i0 -n $vg/$lv2 "$dev2" "$dev1"
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev1" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 -n $vg/$lv2 "$dev2" "$dev1"
+check lv_on $vg $lv2 "$dev1" "$dev3" "$dev4"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
#COMM "move the 2nd stripe: from pv3 of lv2 to pv1"
-prepare_lvs_
-pvmove -i0 -n $vg/$lv2 "$dev3" "$dev1"
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev2" "$dev1" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 -n $vg/$lv2 "$dev3" "$dev1"
+check lv_on $vg $lv2 "$dev2" "$dev1" "$dev4"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
#COMM "move the 3rd stripe: from pv4 of lv2 to pv1"
-prepare_lvs_
-pvmove -i0 -n $vg/$lv2 "$dev4" "$dev1"
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev2" "$dev3" "$dev1"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 -n $vg/$lv2 "$dev4" "$dev1"
+check lv_on $vg $lv2 "$dev2" "$dev3" "$dev1"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
# ---
# partial segment match (source segment splitted)
#COMM "match to the start of segment:from pv2:0-0 to pv5"
-prepare_lvs_
-pvmove -i0 "$dev2":0-0 "$dev5"
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev5" "$dev2" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 "$dev2":0-0 "$dev5"
+check lv_on $vg $lv2 "$dev5" "$dev2" "$dev3" "$dev4"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
-
+#exit 0
#COMM "match to the middle of segment: from pv2:1-1 to pv5"
-prepare_lvs_
-pvmove -i0 "$dev2":1-1 "$dev5"
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev2" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 "$dev2":1-1 "$dev5"
+check lv_on $vg $lv2 "$dev2" "$dev3" "$dev4" "$dev5"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
#COMM "match to the end of segment: from pv2:2-2 to pv5"
-prepare_lvs_
-pvmove -i0 "$dev2":2-2 "$dev5"
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 "$dev2":2-2 "$dev5"
+check lv_on $vg $lv2 "$dev2" "$dev5" "$dev3" "$dev4"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
# ---
# destination segment splitted
#COMM "no destination split: from pv2:0-2 to pv5"
-prepare_lvs_
-pvmove -i0 "$dev2":0-2 "$dev5"
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev5" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 "$dev2":0-2 "$dev5"
+check lv_on $vg $lv2 "$dev5" "$dev3" "$dev4"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
#COMM "destination split into 2: from pv2:0-2 to pv5:5-5 and pv4:5-6"
-prepare_lvs_
-pvmove -i0 --alloc anywhere "$dev2":0-2 "$dev5":5-5 "$dev4":5-6
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev5" "$dev4" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 --alloc anywhere "$dev2":0-2 "$dev5":5-5 "$dev4":5-6
+check lv_on $vg $lv2 "$dev5" "$dev4" "$dev3"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
#COMM "destination split into 3: from pv2:0-2 to {pv3,4,5}:5-5"
-prepare_lvs_
-pvmove -i0 --alloc anywhere "$dev2":0-2 "$dev3":5-5 "$dev4":5-5 "$dev5":5-5
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev3" "$dev4" "$dev5" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 --alloc anywhere "$dev2":0-2 "$dev3":5-5 "$dev4":5-5 "$dev5":5-5
+check lv_on $vg $lv2 "$dev3" "$dev4" "$dev5"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
# ---
# alloc policy (anywhere, contiguous) with both success and failure cases
#COMM "alloc normal on same PV for source and destination: from pv3:0-2 to pv3:5-7"
-prepare_lvs_
-not pvmove -i0 "$dev3":0-2 "$dev3":5-7
+restore_lvs_
+not pvmove $mode -i0 "$dev3":0-2 "$dev3":5-7
# "(cleanup previous test)"
-lv_not_changed_ $vg/$lv1
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+lvs_not_changed_ $lv1 $lv2 $lv3
check_and_cleanup_lvs_
#COMM "alloc anywhere on same PV for source and destination: from pv3:0-2 to pv3:5-7"
-prepare_lvs_
-pvmove -i0 --alloc anywhere "$dev3":0-2 "$dev3":5-7
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev2" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 --alloc anywhere "$dev3":0-2 "$dev3":5-7
+check lv_on $vg $lv2 "$dev2" "$dev3" "$dev4"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
#COMM "alloc anywhere but better area available: from pv3:0-2 to pv3:5-7 or pv5:5-6,pv4:5-5"
-prepare_lvs_
-pvmove -i0 --alloc anywhere "$dev3":0-2 "$dev3":5-7 "$dev5":5-6 "$dev4":5-5
-lv_not_changed_ $vg/$lv1
-#lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev4" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+#lvs -a -o name,size,seg_pe_ranges $vg
+#LV2 1.12m @TESTDIR@/dev/mapper/@PREFIX@pv2:0-2 @TESTDIR@/dev/mapper/@PREFIX@pv3:0-2 @TESTDIR@/dev/mapper/@PREFIX@pv4:0-2
+
+pvmove $mode -i0 --alloc anywhere "$dev3":0-2 "$dev3":5-7 "$dev5":5-6 "$dev4":5-5
+
+#lvs -a -o name,size,seg_pe_ranges $vg
+# Hmm is this correct ? - why pv2 is split
+#LV2 1.12m @TESTDIR@/dev/mapper/@PREFIX@pv2:0-1 @TESTDIR@/dev/mapper/@PREFIX@pv5:5-6 @TESTDIR@/dev/mapper/@PREFIX@pv4:0-1
+#LV2 1.12m @TESTDIR@/dev/mapper/@PREFIX@pv2:2-2 @TESTDIR@/dev/mapper/@PREFIX@pv3:5-5 @TESTDIR@/dev/mapper/@PREFIX@pv4:2-2
+check lv_on $vg $lv2 "$dev2" "$dev3" "$dev4" "$dev5"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
#COMM "alloc contiguous but area not available: from pv2:0-2 to pv5:5-5 and pv4:5-6"
-prepare_lvs_
-not pvmove -i0 --alloc contiguous "$dev2":0-2 "$dev5":5-5 "$dev4":5-6
+restore_lvs_
+not pvmove $mode -i0 --alloc contiguous "$dev2":0-2 "$dev5":5-5 "$dev4":5-6
# "(cleanup previous test)"
-lv_not_changed_ $vg/$lv1
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+lvs_not_changed_ $lv1 $lv2 $lv3
check_and_cleanup_lvs_
#COMM "alloc contiguous and contiguous area available: from pv2:0-2 to pv5:0-0,pv5:3-5 and pv4:5-6"
-prepare_lvs_
-pvmove -i0 --alloc contiguous "$dev2":0-2 "$dev5":0-0 "$dev5":3-5 "$dev4":5-6
-lv_not_changed_ $vg/$lv1
-lv_is_on_ $vg/$lv2 "$dev5" "$dev3" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 --alloc contiguous "$dev2":0-2 "$dev5":0-0 "$dev5":3-5 "$dev4":5-6
+check lv_on $vg $lv2 "$dev5" "$dev3" "$dev4"
+lvs_not_changed_ $lv1 $lv3
check_and_cleanup_lvs_
# ---
# multiple segments in a LV
#COMM "multiple source LVs: from pv3 to pv5"
-prepare_lvs_
-pvmove -i0 "$dev3" "$dev5"
-lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev5"
-lv_is_on_ $vg/$lv2 "$dev2" "$dev5" "$dev4"
-lv_not_changed_ $vg/$lv3
+restore_lvs_
+pvmove $mode -i0 "$dev3" "$dev5"
+check lv_on $vg $lv1 "$dev1" "$dev2" "$dev5"
+check lv_on $vg $lv2 "$dev2" "$dev5" "$dev4"
+lvs_not_changed_ $lv3
check_and_cleanup_lvs_
# ---
# move inactive LV
#COMM "move inactive LV: from pv2 to pv5"
-prepare_lvs_
+restore_lvs_
lvchange -an $vg/$lv1
lvchange -an $vg/$lv3
-pvmove -i0 "$dev2" "$dev5"
-lv_is_on_ $vg/$lv1 "$dev1" "$dev5" "$dev3"
-lv_is_on_ $vg/$lv2 "$dev5" "$dev3" "$dev4"
-lv_is_on_ $vg/$lv3 "$dev5"
+pvmove $mode -i0 "$dev2" "$dev5"
+check lv_on $vg $lv1 "$dev1" "$dev5" "$dev3"
+check lv_on $vg $lv2 "$dev5" "$dev3" "$dev4"
+check lv_on $vg $lv3 "$dev5"
check_and_cleanup_lvs_
# ---
# other failure cases
#COMM "no PEs to move: from pv3 to pv1"
-prepare_lvs_
-pvmove -i0 "$dev3" "$dev1"
-not pvmove -i0 "$dev3" "$dev1"
+restore_lvs_
+pvmove $mode -i0 "$dev3" "$dev1"
+not pvmove $mode -i0 "$dev3" "$dev1"
# "(cleanup previous test)"
-lv_is_on_ $vg/$lv1 "$dev1" "$dev2" "$dev1"
-lv_is_on_ $vg/$lv2 "$dev2" "$dev1" "$dev4"
-lv_not_changed_ $vg/$lv3
+check lv_on $vg $lv1 "$dev1" "$dev2" "$dev1"
+check lv_on $vg $lv2 "$dev2" "$dev1" "$dev4"
+lvs_not_changed_ $lv3
check_and_cleanup_lvs_
#COMM "no space available: from pv2:0-0 to pv1:0-0"
-prepare_lvs_
-not pvmove -i0 "$dev2":0-0 "$dev1":0-0
+restore_lvs_
+not pvmove $mode -i0 "$dev2":0-0 "$dev1":0-0
# "(cleanup previous test)"
-lv_not_changed_ $vg/$lv1
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+lvs_not_changed_ $lv1 $lv2 $lv3
check_and_cleanup_lvs_
#COMM 'same source and destination: from pv1 to pv1'
-prepare_lvs_
-not pvmove -i0 "$dev1" "$dev1"
+restore_lvs_
+not pvmove $mode -i0 "$dev1" "$dev1"
#"(cleanup previous test)"
-lv_not_changed_ $vg/$lv1
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+lvs_not_changed_ $lv1 $lv2 $lv3
check_and_cleanup_lvs_
#COMM "sum of specified destination PEs is large enough, but it includes source PEs and the free PEs are not enough"
-prepare_lvs_
-not pvmove --alloc anywhere "$dev1":0-2 "$dev1":0-2 "$dev5":0-0 2> err
+restore_lvs_
+not pvmove $mode --alloc anywhere "$dev1":0-2 "$dev1":0-2 "$dev5":0-0 2> err
#"(cleanup previous test)"
grep "Insufficient free space" err
-lv_not_changed_ $vg/$lv1
-lv_not_changed_ $vg/$lv2
-lv_not_changed_ $vg/$lv3
+lvs_not_changed_ $lv1 $lv2 $lv3
check_and_cleanup_lvs_
# ---------------------------------------------------------------------
#COMM "pvmove abort"
-prepare_lvs_
-pvmove -i100 -b "$dev1" "$dev3"
+restore_lvs_
+LVM_TEST_TAG="kill_me_$PREFIX" pvmove $mode -i100 -b "$dev1" "$dev3"
pvmove --abort
check_and_cleanup_lvs_
#COMM "pvmove out of --metadatacopies 0 PV (bz252150)"
vgremove -ff $vg
-pvcreate $(cat DEVICES)
+pvcreate "${DEVICES[@]}"
pvcreate --metadatacopies 0 "$dev1" "$dev2"
create_vg_
-lvcreate -l4 -n $lv1 $vg "$dev1"
-pvmove "$dev1"
+lvcreate -aey -l4 -n $lv1 $vg "$dev1"
+pvmove $mode "$dev1"
#COMM "pvmove fails activating mirror, properly restores state before pvmove"
dmsetup create $vg-pvmove0 --notable
-not pvmove -i 1 "$dev2"
-test $(dmsetup info --noheadings -c -o suspended $vg-$lv1) = "Active"
-dmsetup remove $vg-pvmove0
+not pvmove $mode -i 1 "$dev2"
+dmsetup info --noheadings -c -o suspended $vg-$lv1
+test "$(dmsetup info --noheadings -c -o suspended "$vg-$lv1")" = "Active"
+if dmsetup info $vg-pvmove0_mimage_0 > /dev/null; then
+ dmsetup remove $vg-pvmove0 $vg-pvmove0_mimage_0 $vg-pvmove0_mimage_1
+else
+ dmsetup remove $vg-pvmove0
+fi
+
+lvremove -ff $vg
+done