+++ /dev/null
-#! /bin/bash
-# SPDX-License-Identifier: GPL-2.0
-# Copyright (c) 2017 Oracle. All Rights Reserved.
-#
-# FS QA Test 154
-#
-# Test for reappearing missing device functionality.
-# This test will fail without the btrfs kernel patch
-# [PATCH] btrfs: handle dynamically reappearing missing device
-#
-seq=`basename $0`
-seqres=$RESULT_DIR/$seq
-echo "QA output created by $seq"
-
-here=`pwd`
-tmp=/tmp/$$
-status=1 # failure is the default!
-trap "_cleanup; exit \$status" 0 1 2 3 15
-
-_cleanup()
-{
- cd /
- rm -f $tmp.*
-}
-
-# get standard environment, filters and checks
-. ./common/rc
-. ./common/filter
-. ./common/module
-
-# remove previous $seqres.full before test
-rm -f $seqres.full
-
-# real QA test starts here
-
-_supported_fs btrfs
-_supported_os Linux
-_require_scratch_dev_pool 2
-_require_btrfs_forget_or_module_loadable
-
-_scratch_dev_pool_get 2
-
-DEV1=`echo $SCRATCH_DEV_POOL | awk '{print $1}'`
-DEV2=`echo $SCRATCH_DEV_POOL | awk '{print $2}'`
-
-echo DEV1=$DEV1 >> $seqres.full
-echo DEV2=$DEV2 >> $seqres.full
-
-# Balance won't be successful if filled too much
-DEV1_SZ=`blockdev --getsize64 $DEV1`
-DEV2_SZ=`blockdev --getsize64 $DEV2`
-
-# get min
-MAX_FS_SZ=`echo -e "$DEV1_SZ\n$DEV2_SZ" | sort -n | head -1`
-# Need disks with more than 2G
-if [ $MAX_FS_SZ -lt 2000000000 ]; then
- _scratch_dev_pool_put
- _notrun "Smallest dev size $MAX_FS_SZ, Need at least 2G"
-fi
-
-MAX_FS_SZ=100000000
-bs="1M"
-COUNT=$(($MAX_FS_SZ / 1000000))
-CHECKPOINT1=0
-CHECKPOINT2=0
-
-setup()
-{
- echo >> $seqres.full
- echo "MAX_FS_SZ=$MAX_FS_SZ COUNT=$COUNT" >> $seqres.full
- echo "setup"
- echo "-----setup-----" >> $seqres.full
- _scratch_pool_mkfs "-mraid1 -draid1" >> $seqres.full 2>&1
- _scratch_mount >> $seqres.full 2>&1
- dd if=/dev/urandom of="$SCRATCH_MNT"/tf bs=$bs count=1 \
- >>$seqres.full 2>&1
- _run_btrfs_util_prog filesystem show -m ${SCRATCH_MNT}
- _run_btrfs_util_prog filesystem df $SCRATCH_MNT
- COUNT=$(( $COUNT - 1 ))
- echo "unmount" >> $seqres.full
- _scratch_unmount
-}
-
-degrade_mount_write()
-{
- echo >> $seqres.full
- echo "--degraded mount: max_fs_sz $max_fs_sz bytes--" >> $seqres.full
- echo
- echo "degraded mount"
-
- echo "clean btrfs ko" >> $seqres.full
- # un-scan the btrfs devices
- _btrfs_forget_or_module_reload
- _mount -o degraded $DEV1 $SCRATCH_MNT >>$seqres.full 2>&1
- cnt=$(( $COUNT/10 ))
- dd if=/dev/urandom of="$SCRATCH_MNT"/tf1 bs=$bs count=$cnt \
- >>$seqres.full 2>&1
- COUNT=$(( $COUNT - $cnt ))
- _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
- _run_btrfs_util_prog filesystem df $SCRATCH_MNT
- CHECKPOINT1=`md5sum $SCRATCH_MNT/tf1`
- echo $SCRATCH_MNT/tf1:$CHECKPOINT1 >> $seqres.full
-}
-
-scan_missing_dev_and_write()
-{
- echo >> $seqres.full
- echo "--scan missing $DEV2--" >> $seqres.full
- echo
- echo "scan missing dev and write"
-
- _run_btrfs_util_prog device scan $DEV2
-
- echo >> $seqres.full
-
- _run_btrfs_util_prog filesystem show -m ${SCRATCH_MNT}
- _run_btrfs_util_prog filesystem df ${SCRATCH_MNT}
-
- dd if=/dev/urandom of="$SCRATCH_MNT"/tf2 bs=$bs count=$COUNT \
- >>$seqres.full 2>&1
- CHECKPOINT2=`md5sum $SCRATCH_MNT/tf2`
- echo $SCRATCH_MNT/tf2:$CHECKPOINT2 >> $seqres.full
-}
-
-balance_convert()
-{
- echo >> $seqres.full
- echo "----- run balance -----" >> $seqres.full
- echo
- echo "run balance"
-
- _run_btrfs_balance_start -dconvert=raid1 \
- -mconvert=raid1 $SCRATCH_MNT >> $seqres.full
-}
-
-verify()
-{
- echo >> $seqres.full
- echo "--mount reconstructed dev only and check md5sum--" >> $seqres.full
- echo
- echo "mount reconstructed dev only and check md5sum"
- echo "unmount" >> $seqres.full
-
- _scratch_unmount
- _btrfs_forget_or_module_reload
- _mount -o degraded $DEV2 $SCRATCH_MNT >>$seqres.full 2>&1
- verify_checkpoint1=`md5sum $SCRATCH_MNT/tf1`
- verify_checkpoint2=`md5sum $SCRATCH_MNT/tf2`
-
- if [ "$verify_checkpoint1" != "$CHECKPOINT1" ]; then
- echo "checkpoint1 on reappeared disk does not match after balance"
- fi
-
- if [ "$verify_checkpoint2" != "$CHECKPOINT2" ]; then
- echo "checkpoint2 on reappeared disk does not match after balance"
- fi
-}
-
-setup
-degrade_mount_write
-scan_missing_dev_and_write
-balance_convert
-verify
-
-$UMOUNT_PROG $DEV2
-_scratch_dev_pool_put
-
-status=0
-exit