On Tue, Mar 19, 2019 at 05:49:40PM +0800, Anand Jain wrote: > btrfs module reload was introduced to unregister devices in the btrfs > kernel module. > > The problem with the module reload approach is that you can't run btrfs > test cases 124, 125, 154 and 164 on the system with btrfs as root fs. > > Patches [1] introduced btrfs forget feature which lets to cleanup the > kernel device list without kernel module reload. > > [1] > btrfs-progs: add cli to forget one or all scanned devices > btrfs: introduce new ioctl to unregister a btrfs device > > So this patch uses forget feature instead of kernel module reload, if > the forget feature is available. > > Signed-off-by: Anand Jain <anand.j...@oracle.com>
Looks fine to me. But I'd like an explicit review from btrfs folks too. Thanks, Eryu > --- > common/btrfs | 20 ++++++++++++++++++++ > tests/btrfs/124 | 6 +++--- > tests/btrfs/125 | 6 +++--- > tests/btrfs/154 | 6 +++--- > tests/btrfs/164 | 4 ++-- > 5 files changed, 31 insertions(+), 11 deletions(-) > > diff --git a/common/btrfs b/common/btrfs > index f6513c06f95f..e94e011db04e 100644 > --- a/common/btrfs > +++ b/common/btrfs > @@ -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_if_not_fs_loadable() > +{ > + _btrfs_supports_forget && return > + > + _require_loadable_fs_module "btrfs" > +} > + > +_btrfs_forget_if_not_fs_reload() > +{ > + _btrfs_supports_forget && return > + > + _reload_fs_module "btrfs" > +} > diff --git a/tests/btrfs/124 b/tests/btrfs/124 > index a52c65f608ff..9341dcea8896 100755 > --- a/tests/btrfs/124 > +++ b/tests/btrfs/124 > @@ -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_if_not_fs_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_if_not_fs_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_if_not_fs_reload > _mount -o degraded $dev2 $SCRATCH_MNT >>$seqres.full 2>&1 > _run_btrfs_util_prog filesystem show > checkpoint3=`md5sum $SCRATCH_MNT/tf2` > diff --git a/tests/btrfs/125 b/tests/btrfs/125 > index 847fa62ad25f..3d847033f1a2 100755 > --- a/tests/btrfs/125 > +++ b/tests/btrfs/125 > @@ -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_if_not_fs_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_if_not_fs_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_if_not_fs_reload > > _mount -o degraded,device=${dev2} $dev3 $SCRATCH_MNT >>$seqres.full 2>&1 > > diff --git a/tests/btrfs/154 b/tests/btrfs/154 > index cd6c688fb9fe..e39f54ac6ab8 100755 > --- a/tests/btrfs/154 > +++ b/tests/btrfs/154 > @@ -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_if_not_fs_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_if_not_fs_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_if_not_fs_reload > _mount -o degraded $DEV2 $SCRATCH_MNT >>$seqres.full 2>&1 > verify_checkpoint1=`md5sum $SCRATCH_MNT/tf1` > verify_checkpoint2=`md5sum $SCRATCH_MNT/tf2` > diff --git a/tests/btrfs/164 b/tests/btrfs/164 > index 097191a0e493..55042c4035e0 100755 > --- a/tests/btrfs/164 > +++ b/tests/btrfs/164 > @@ -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_if_not_fs_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_if_not_fs_reload > run_check _mount $dev_sprout $SCRATCH_MNT > _run_btrfs_util_prog filesystem show -m $SCRATCH_MNT > echo -- sprout -- > -- > 1.8.3.1 >