diff --git a/common/btrfs b/common/btrfs
index 6d452d4d..9517c0a4 100644
--- a/common/btrfs
+++ b/common/btrfs
@@ -411,3 +411,15 @@ _btrfs_forget_or_module_reload()
 
 	_reload_fs_module "btrfs"
 }
+
+# print whether or not the free space tree is enabled on the scratch dev
+_btrfs_free_space_tree_enabled()
+{
+	compat_ro="$($BTRFS_UTIL_PROG inspect-internal dump-super "$SCRATCH_DEV" | \
+		     sed -rn 's/^compat_ro_flags\s+(.*)$/\1/p')"
+	if ((compat_ro & 0x1)); then
+		echo "free space tree is enabled"
+	else
+		echo "free space tree is disabled"
+			fi
+}
diff --git a/tests/btrfs/131 b/tests/btrfs/131
index 3de7eef8..93ff59f4 100755
--- a/tests/btrfs/131
+++ b/tests/btrfs/131
@@ -52,17 +52,6 @@ mkfs_v2()
 	_scratch_unmount
 }
 
-check_fst_compat()
-{
-	compat_ro="$($BTRFS_UTIL_PROG inspect-internal dump-super "$SCRATCH_DEV" | \
-		     sed -rn 's/^compat_ro_flags\s+(.*)$/\1/p')"
-	if ((compat_ro & 0x1)); then
-		echo "free space tree is enabled"
-	else
-		echo "free space tree is disabled"
-	fi
-}
-
 # Mount options might interfere.
 export MOUNT_OPTIONS=""
 
@@ -76,19 +65,19 @@ export MOUNT_OPTIONS=""
 mkfs_v1
 echo "Using free space cache"
 _scratch_mount -o space_cache=v1
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 
 mkfs_v1
 echo "Enabling free space tree"
 _scratch_mount -o space_cache=v2
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 
 mkfs_v1
 echo "Disabling free space cache and enabling free space tree"
 _scratch_mount -o clear_cache,space_cache=v2
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 
 # When the free space tree is enabled:
@@ -106,32 +95,32 @@ _try_scratch_mount -o space_cache=v1 >/dev/null 2>&1 || echo "mount failed"
 mkfs_v2
 echo "Mounting existing free space tree"
 _scratch_mount
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 _scratch_mount -o space_cache=v2
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 
 mkfs_v2
 echo "Recreating free space tree"
 _scratch_mount -o clear_cache,space_cache=v2
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 mkfs_v2
 _scratch_mount -o clear_cache
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 
 mkfs_v2
 echo "Disabling free space tree"
 _scratch_mount -o clear_cache,nospace_cache
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 
 mkfs_v2
 echo "Reverting to free space cache"
 _scratch_mount -o clear_cache,space_cache=v1
-check_fst_compat
+_btrfs_free_space_tree_enabled
 _scratch_unmount
 
 # success, all done
diff --git a/tests/btrfs/219 b/tests/btrfs/219
new file mode 100755
index 00000000..e6c8cb60
--- /dev/null
+++ b/tests/btrfs/219
@@ -0,0 +1,74 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2020 Facebook.  All Rights Reserved.
+#
+# FS QA Test 219
+#
+# Test free space tree remount scenarios.
+#
+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
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+
+_supported_fs btrfs
+_supported_os Linux
+_require_scratch
+_require_btrfs_command inspect-internal dump-super
+_require_btrfs_fs_feature free_space_tree
+
+# Remount:
+# -o space_cache=v1; -o remount,space_cache=v2: error
+# -o space_cache=v1,ro; -o remount,ro,space_cache=v2: error
+# -o space_cache=v1,ro; -o remount,space_cache=v2: success
+echo "Trying to remount with free space tree"
+_scratch_mkfs >/dev/null 2>&1
+_scratch_mount -o clear_cache,space_cache=v1
+_btrfs_free_space_tree_enabled
+_scratch_remount space_cache=v2 >/dev/null 2>&1 || echo "remount failed"
+_scratch_unmount
+
+echo "Trying to remount read-only with free space tree"
+_scratch_mkfs >/dev/null 2>&1
+_scratch_mount -o clear_cache,space_cache=v1
+_btrfs_free_space_tree_enabled
+_scratch_remount ro,space_cache=v1
+_btrfs_free_space_tree_enabled
+_scratch_remount ro,space_cache=v2 >/dev/null 2>&1 || echo "remount failed"
+_scratch_unmount
+
+echo "Remount read-only to read-write with free space tree"
+_scratch_mkfs >/dev/null 2>&1
+_scratch_mount -o clear_cache,space_cache=v1
+_btrfs_free_space_tree_enabled
+_scratch_remount ro,space_cache=v1
+_btrfs_free_space_tree_enabled
+_scratch_remount space_cache=v2
+_btrfs_free_space_tree_enabled
+# ensure the free space tree is sticky across reboot
+_scratch_cycle_mount
+_btrfs_free_space_tree_enabled
+_scratch_unmount
+
+# success, all done
+status=0
+exit
diff --git a/tests/btrfs/219.out b/tests/btrfs/219.out
new file mode 100644
index 00000000..1d5624a7
--- /dev/null
+++ b/tests/btrfs/219.out
@@ -0,0 +1,13 @@
+QA output created by 219
+Trying to remount with free space tree
+free space tree is disabled
+remount failed
+Trying to remount read-only with free space tree
+free space tree is disabled
+free space tree is disabled
+remount failed
+Remount read-only to read-write with free space tree
+free space tree is disabled
+free space tree is disabled
+free space tree is enabled
+free space tree is enabled
diff --git a/tests/btrfs/group b/tests/btrfs/group
index 3295856d..f4dbfafb 100644
--- a/tests/btrfs/group
+++ b/tests/btrfs/group
@@ -221,3 +221,4 @@
 216 auto quick seed
 217 auto quick trim dangerous
 218 auto quick volume
+219 auto quick
