1 # An array is assembled incompletely. Some disks will
2 # have later metadata than others.
3 # The array is then reassembled in the "wrong" order -
4 # older meta data first.
5 # This FAILS with mdadm 3.3
6 . tests/env-ddf-template
7 tmp=$(mktemp /tmp/mdtest-XXXXXX)
8 rm -f $tmp /var/tmp/mdmon.log
11 mdadm -CR $container -e ddf -n 4 $dev8 $dev9 $dev10 $dev11
14 mdadm -CR $member1 -n 4 -l 10 $dev8 $dev10 $dev9 $dev11 -z 10000
15 mdadm -CR $member0 -n 2 -l 1 $dev8 $dev9 -z 10000
17 mdadm --wait $member0 || true
18 mdadm --wait $member1 || true
22 sha_0a=$(sha1_sum $member0)
23 sha_1a=$(sha1_sum $member1)
28 # Add all devices except those for $member0
32 # Start runnable members ($member1) and write
35 sha_1b=$(sha1_sum $member1)
40 # Seq number should be different now
41 seq8a=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
42 seq10a=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p')
44 if [ $seq8a -ge $seq10a ]; then
46 echo ERROR: sequential number of $dev10 not bigger than $dev8
48 if [ x$sha_1a = x$sha_1b ]; then
50 echo ERROR: sha1sums equal after write
53 #[ -f /var/tmp/mdmon.log ] && cat /var/tmp/mdmon.log
56 # Note that we add the previously missing disks first.
57 # $dev10 should have a higher seq number than $dev8
58 for d in $dev8 $dev9 $dev10 $dev11; do
63 sha_0c=$(sha1_sum $member0)
64 sha_1c=$(sha1_sum $member1)
69 seq8c=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
70 seq10c=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p')
72 if [ x$sha_0a != x$sha_0c ]; then
74 echo ERROR: sha1sum of $member0 has changed
76 if [ x$sha_1b != x$sha_1c ]; then
78 echo ERROR: sha1sum of $member1 has changed
80 if [ \( $seq10a -ge $seq10c \) -o \( $seq8c -ne $seq10c \) ]; then
82 echo ERROR: sequential numbers are wrong
85 # Expect consistent state
86 for d in $dev10 $dev8; do
89 egrep 'state\['$x'\] : Optimal, Consistent' $tmp || {
91 echo ERROR: $member0 has unexpected state on $d
94 if [ x$(egrep -c 'active/Online$' $tmp) != x4 ]; then
96 echo ERROR: unexpected number of online disks on $d
101 if mdadm -A $container $dev8 $dev9 $dev10 $dev11; then
103 sha_0d=$(sha1_sum $member0)
104 sha_1d=$(sha1_sum $member1)
107 seq8d=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
108 seq10d=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p')
109 if [ x$sha_0a != x$sha_0d ]; then
111 echo ERROR: sha1sum of $member0 has changed
113 if [ x$sha_1b != x$sha_1d ]; then
115 echo ERROR: sha1sum of $member1 has changed
117 if [ \( $seq10a -ge $seq10d \) -o \( $seq8d -ne $seq10d \) ]; then
119 echo ERROR: sequential numbers are wrong
123 echo ERROR: assembly failed
126 if [ $ret -ne 0 ]; then
130 rm -f $tmp /var/tmp/mdmon.log