btrfs: try use forget to unregister device
authorAnand Jain <anand.jain@oracle.com>
Tue, 2 Apr 2019 08:19:46 +0000 (16:19 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sat, 6 Apr 2019 11:41:47 +0000 (19:41 +0800)
Some btrfs test cases use btrfs module-reload to unregister devices
in the btrfs kernel. The problem with the module-reload approach is,
if test system contains btrfs as rootfs, then you can't run these
test cases.

Patches [1] introduced btrfs forget feature which can unregister
devices without the module-reload approach.

 [1]
 btrfs-progs: device scan: add new option to forget one or all scanned devices
 btrfs: introduce new ioctl to unregister a btrfs device

And this patch makes relevant changes in the fstests to use this new
feature, when available.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
common/btrfs
tests/btrfs/124
tests/btrfs/125
tests/btrfs/154
tests/btrfs/164

index f6513c06f95fec3ceb2d42801d33bfaff80fbc51..19ac7cc4b18cd93000e3e2df92365f4e21a91638 100644 (file)
@@ -382,3 +382,23 @@ _scratch_btrfs_sectorsize()
        $BTRFS_UTIL_PROG inspect-internal dump-super $SCRATCH_DEV |\
                grep sectorsize | awk '{print $2}'
 }
+
+_btrfs_supports_forget()
+{
+       $BTRFS_UTIL_PROG device scan --help | grep -wq forget && \
+               $BTRFS_UTIL_PROG device scan --forget > /dev/null 2>&1
+}
+
+_require_btrfs_forget_or_module_loadable()
+{
+       _btrfs_supports_forget && return
+
+       _require_loadable_fs_module "btrfs"
+}
+
+_btrfs_forget_or_module_reload()
+{
+       _btrfs_supports_forget && return
+
+       _reload_fs_module "btrfs"
+}
index a52c65f608ffd856e5baad273f0741f1b185ac6e..0686a3b5f9913ba9763ca43a013f82cddb309dfd 100755 (executable)
@@ -51,7 +51,7 @@ _supported_fs btrfs
 _supported_os Linux
 _require_scratch_dev_pool 2
 _test_unmount
-_require_loadable_fs_module "btrfs"
+_require_btrfs_forget_or_module_loadable
 
 _scratch_dev_pool_get 2
 
@@ -86,7 +86,7 @@ echo "clean btrfs ko" >> $seqres.full
 _scratch_unmount
 
 # un-scan the btrfs devices
-_reload_fs_module "btrfs"
+_btrfs_forget_or_module_reload
 
 echo >> $seqres.full
 echo "-----Write degraded mount fill upto $max_fs_sz bytes-----" >> $seqres.full
@@ -125,7 +125,7 @@ echo
 echo "Mount degraded with the other dev"
 _scratch_unmount
 # un-scan the btrfs devices
-_reload_fs_module "btrfs"
+_btrfs_forget_or_module_reload
 _mount -o degraded $dev2 $SCRATCH_MNT >>$seqres.full 2>&1
 _run_btrfs_util_prog filesystem show
 checkpoint3=`md5sum $SCRATCH_MNT/tf2`
index 847fa62ad25fb8e6de72e55c1d3f3ba235f0d798..e1edccddd7d4b189d3fec529ee9dea544388aeab 100755 (executable)
@@ -50,7 +50,7 @@ _supported_fs btrfs
 _supported_os Linux
 _require_scratch_dev_pool 3
 _test_unmount
-_require_loadable_fs_module "btrfs"
+_require_btrfs_forget_or_module_loadable
 _require_btrfs_fs_feature raid56
 
 _scratch_dev_pool_get 3
@@ -103,7 +103,7 @@ echo "unmount" >> $seqres.full
 _scratch_unmount
 echo "clean btrfs ko" >> $seqres.full
 # un-scan the btrfs devices
-_reload_fs_module "btrfs"
+_btrfs_forget_or_module_reload
 _mount -o degraded,device=$dev2 $dev1 $SCRATCH_MNT >>$seqres.full 2>&1
 dd if=/dev/zero of="$SCRATCH_MNT"/tf2 bs=$bs count=$count \
                                        >>$seqres.full 2>&1
@@ -139,7 +139,7 @@ echo "Mount degraded but with other dev"
 
 _scratch_unmount
 # un-scan the btrfs devices
-_reload_fs_module "btrfs"
+_btrfs_forget_or_module_reload
 
 _mount -o degraded,device=${dev2} $dev3 $SCRATCH_MNT >>$seqres.full 2>&1
 
index cd6c688fb9fe99adc2580f0c06e2e0de1e196f51..cbf65a42919dd6c2f789720668bd12d291fdece3 100755 (executable)
@@ -36,7 +36,7 @@ rm -f $seqres.full
 _supported_fs btrfs
 _supported_os Linux
 _require_scratch_dev_pool 2
-_require_loadable_fs_module "btrfs"
+_require_btrfs_forget_or_module_loadable
 
 _scratch_dev_pool_get 2
 
@@ -90,7 +90,7 @@ degrade_mount_write()
 
        echo "clean btrfs ko" >> $seqres.full
        # un-scan the btrfs devices
-       _reload_fs_module "btrfs"
+       _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 \
@@ -142,7 +142,7 @@ verify()
        echo "unmount" >> $seqres.full
 
        _scratch_unmount
-       _reload_fs_module "btrfs"
+       _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`
index 097191a0e49371784f8487dfc8144317900ebc48..e280f52e930af56797d90eb3047443b9201932bd 100755 (executable)
@@ -36,7 +36,7 @@ rm -f $seqres.full
 # Modify as appropriate.
 _supported_fs btrfs
 _supported_os Linux
-_require_loadable_fs_module "btrfs"
+_require_btrfs_forget_or_module_loadable
 _require_scratch_dev_pool 2
 
 _scratch_dev_pool_get 2
@@ -69,7 +69,7 @@ delete_seed()
 {
        _run_btrfs_util_prog device delete $dev_seed $SCRATCH_MNT
        _scratch_unmount
-       _reload_fs_module "btrfs"
+       _btrfs_forget_or_module_reload
        run_check _mount $dev_sprout $SCRATCH_MNT
        _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT
        echo -- sprout --