# sanity check array creation
+imsm_check_hold() {
+ if mdadm --remove $1 $2; then
+ echo "$2 removal from $1 should have been blocked" >&2
+ cat /proc/mdstat >&2
+ mdadm -E $2
+ exit 1
+ fi
+}
+
+imsm_check_removal() {
+ if ! mdadm --remove $1 $2 ; then
+ echo "$2 removal from $1 should have succeeded" >&2
+ cat /proc/mdstat >&2
+ mdadm -E $2
+ exit 1
+ fi
+}
+
+. tests/env-imsm-template
+
# IMSM rounds to multiples of one mebibyte - 1024K
DEV_ROUND_K=1024
imsm_check container $num_disks
# RAID0 + RAID1
-size=10000
+size=9000
level=0
chunk=64
offset=0
mdadm -CR $member0 $dev0 $dev1 -n $num_disks -l $level -z $size -c $chunk
-imsm_check member $member0 $num_disks $level $size $offset $chunk
+imsm_check member $member0 $num_disks $level $size $((size*2)) $offset $chunk
testdev $member0 $num_disks $size $chunk
offset=$(((size & ~(chunk - 1)) + 2048))
-size=5000
+size=4000
level=1
chunk=0
mdadm -CR $member1 $dev0 $dev1 -n $num_disks -l $level -z $size
-imsm_check member $member1 $num_disks $level $size $offset $chunk
-testdev $member1 1 $size 1
+imsm_check member $member1 $num_disks $level $size $size $offset $chunk
+testdev $member1 1 $size 64
check wait
mdadm -Ss
mdadm -CR $container -e imsm -n $num_disks $dev0 $dev1 $dev2 $dev3
imsm_check container $num_disks
-size=10000
+size=9000
level=10
chunk=64
offset=0
mdadm -CR $member0 $dev0 $dev1 $dev2 $dev3 -n $num_disks -l $level -z $size -c $chunk
-imsm_check member $member0 $num_disks $level $size $offset $chunk
+imsm_check member $member0 $num_disks $level $size $((size*2)) $offset $chunk
testdev $member0 $((num_disks-2)) $size $chunk
offset=$(((size & ~(chunk - 1)) + 2048))
-size=5000
+size=4000
level=5
mdadm -CR $member1 $dev0 $dev1 $dev2 $dev3 -n $num_disks -l $level -z $size -c $chunk
-imsm_check member $member1 $num_disks $level $size $offset $chunk
+imsm_check member $member1 $num_disks $level $size $((size*3)) $offset $chunk
testdev $member1 $((num_disks-1)) $size $chunk
check wait
# FAIL / REBUILD
imsm_check_hold $container $dev0
mdadm --fail $member0 $dev0
-mdadm --wait-clean --scan
+mdadm --wait-clean --scan || true
imsm_check_removal $container $dev0
mdadm --add $container $dev4
check wait
imsm_check_hold $container $dev4
-