btrfs: make sure we rescan all devices after unregistering
[xfstests-dev.git] / tests / btrfs / 163
index 24c725afb6b90211ffb6aef0a0219fd5977efaaf..b6bd6906df262b2a4e4472c531da37fe2a78c5b3 100755 (executable)
@@ -4,11 +4,15 @@
 #
 # FS QA Test 163
 #
-# Test case to verify that a seed device can be replaced
+# Test case to verify that a sprouted device can be replaced
 #  Create a seed device
 #  Create a sprout device
 #  Remount RW
-#  Run device replace on the seed device
+#  Run device replace on the sprout device
+#
+# Depends on the kernel patch
+#   c6a5d954950c btrfs: fail replace of seed device
+
 seq=`basename $0`
 seqres=$RESULT_DIR/$seq
 echo "QA output created by $seq"
@@ -22,6 +26,7 @@ _cleanup()
 {
        cd /
        rm -f $tmp.*
+       _btrfs_rescan_devices
 }
 
 # get standard environment, filters and checks
@@ -36,9 +41,9 @@ rm -f $seqres.full
 
 # Modify as appropriate.
 _supported_fs btrfs
-_supported_os Linux
 _require_command "$BTRFS_TUNE_PROG" btrfstune
 _require_scratch_dev_pool 3
+_require_btrfs_forget_or_module_loadable
 
 _scratch_dev_pool_get 3
 
@@ -52,7 +57,7 @@ create_seed()
        run_check _mount $dev_seed $SCRATCH_MNT
        $XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 4M" $SCRATCH_MNT/foobar >\
                /dev/null
-       echo -- gloden --
+       echo -- golden --
        od -x $SCRATCH_MNT/foobar
        _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
        _scratch_unmount
@@ -64,22 +69,28 @@ add_sprout()
 {
        _run_btrfs_util_prog device add -f $dev_sprout $SCRATCH_MNT
        _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
+       _mount -o remount,rw $dev_sprout $SCRATCH_MNT
+       $XFS_IO_PROG -f -c "pwrite -S 0xcd 0 4M" $SCRATCH_MNT/foobar2 >\
+               /dev/null
 }
 
-replace_seed()
+replace_sprout()
 {
-       _run_btrfs_util_prog replace start -fB $dev_seed $dev_replace_tgt $SCRATCH_MNT
+       _run_btrfs_util_prog replace start -fB $dev_sprout $dev_replace_tgt $SCRATCH_MNT
        _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
        _scratch_unmount
-       run_check _mount $dev_replace_tgt $SCRATCH_MNT
+       _btrfs_forget_or_module_reload
+       run_check _mount -o device=$dev_seed $dev_replace_tgt $SCRATCH_MNT
        echo -- sprout --
        od -x $SCRATCH_MNT/foobar
+       od -x $SCRATCH_MNT/foobar2
        _scratch_unmount
 
 }
 
 seed_is_mountable()
 {
+       _btrfs_forget_or_module_reload
        run_check _mount $dev_seed $SCRATCH_MNT
        _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
        _scratch_unmount
@@ -87,11 +98,12 @@ seed_is_mountable()
 
 create_seed
 add_sprout
-replace_seed
+replace_sprout
 
 seed_is_mountable
 
 _scratch_dev_pool_put
+_btrfs_rescan_devices
 
 status=0
 exit