
# Check integrity of raid6 in degraded modes
# Create a 5 disk raid6, dump some data to it, then
# sha1sum it with different pairs of devices failed

if [ "$INTEGRITY" != "yes" ]; then
  echo -ne 'skipping... '
  exit 0
fi

# layouts='ls rs la ra'
layouts='ls'
# lv=`uname -r`
# if expr $lv '>=' 2.6.30 > /dev/null
# then
#   layouts="$layouts parity-first ddf-zero-restart ddf-N-restart ddf-N-continue \
# 	left-asymmetric-6 right-asymmetric-6 left-symmetric-6 right-symmetric-6 parity-first-6"
# fi

for layout in $layouts
do
  mdadm -CR $md0 -l6 --layout $layout -n5 $dev0 $dev1 $dev2 $dev3 $dev4
  check wait
  tar cf - /etc > $md0
  sum=`sha1sum $md0`

  totest=
  for second in $dev0 $dev1 $dev2 $dev3 $dev4
  do
    mdadm $md0 -f $second
    mdadm $md0 -r $second
    blockdev --flushbufs $md0
    sum1=`sha1sum $md0`
    if [ "$sum" != "$sum1" ]
    then
      echo $sum does not match $sum1 with $second missing
      exit 1
    fi
    for first in $totest
    do
       mdadm $md0 -f $first
       mdadm $md0 -r $first
       blockdev --flushbufs $md0
       sum1=`sha1sum $md0`
       if [ "$sum" != "$sum1" ]
       then
         echo $sum does not match $sum1 with $first and $second missing
         exit 1
       fi
       mdadm $md0 -a $first
       check wait
       while ! (check state 'U*_U*'); do check wait; sleep 0.2; done
    done
    mdadm $md0 -a $second
    check wait
    while ! (check state 'U*'); do check wait; sleep 0.2; done
    totest="$totest $second"
  done
  mdadm -S $md0
done
