| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2013 Red Hat, Inc. All Rights Reserved. |
| # |
| # FS QA Test No. btrfs/020 |
| # |
| # btrfs device replace test on RO fs |
| # |
| # Regression test for commit: |
| # bbb651e Btrfs: don't allow the replace procedure on read only filesystems |
| # |
| seq=`basename $0` |
| seqres=$RESULT_DIR/$seq |
| echo "QA output created by $seq" |
| |
| here=`pwd` |
| tmp=/tmp/$$ |
| |
| status=1 # failure is the default! |
| |
| _cleanup() |
| { |
| cd / |
| rm -f $tmp.* |
| $UMOUNT_PROG $loop_mnt |
| _destroy_loop_device $loop_dev1 |
| losetup -d $loop_dev2 >/dev/null 2>&1 |
| _destroy_loop_device $loop_dev3 |
| rm -rf $loop_mnt |
| rm -f $fs_img1 $fs_img2 $fs_img3 |
| } |
| |
| trap "_cleanup ; exit \$status" 0 1 2 3 15 |
| |
| # get standard environment, filters and checks |
| . ./common/rc |
| . ./common/filter |
| |
| # real QA test starts here |
| _supported_fs btrfs |
| _require_test |
| _require_loop |
| |
| rm -f $seqres.full |
| echo "Silence is golden" |
| |
| loop_mnt=$TEST_DIR/$seq.$$.mnt |
| fs_img1=$TEST_DIR/$seq.$$.img1 |
| fs_img2=$TEST_DIR/$seq.$$.img2 |
| fs_img3=$TEST_DIR/$seq.$$.img3 |
| mkdir $loop_mnt |
| $XFS_IO_PROG -f -c "truncate 256m" $fs_img1 >>$seqres.full 2>&1 |
| $XFS_IO_PROG -f -c "truncate 256m" $fs_img2 >>$seqres.full 2>&1 |
| $XFS_IO_PROG -f -c "truncate 256m" $fs_img3 >>$seqres.full 2>&1 |
| |
| loop_dev1=`_create_loop_device $fs_img1` |
| loop_dev2=`_create_loop_device $fs_img2` |
| loop_dev3=`_create_loop_device $fs_img3` |
| |
| _mkfs_dev -m raid1 -d raid1 $loop_dev1 $loop_dev2 >>$seqres.full 2>&1 |
| _mount -o ro $loop_dev1 $loop_mnt |
| |
| $BTRFS_UTIL_PROG replace start -B 2 $loop_dev3 $loop_mnt >>$seqres.full 2>&1 && \ |
| _fail "FAIL: Device replaced on RO btrfs" |
| |
| status=0 |
| exit |