diff --git a/tests/common b/tests/common
index 91682ef..fed9ede 100644
--- a/tests/common
+++ b/tests/common
@@ -94,6 +94,14 @@ check_prereq()
 	fi
 }
 
+check_global_prereq()
+{
+	which $1 &> /dev/null
+	if [ $? -ne 0 ]; then
+		_fail "Failed system wide prerequisities: $1";
+	fi
+}
+
 check_image()
 {
 	local image
diff --git a/tests/convert-tests.sh b/tests/convert-tests.sh
index 06d8419..39115b3 100755
--- a/tests/convert-tests.sh
+++ b/tests/convert-tests.sh
@@ -15,6 +15,11 @@ DATASET_SIZE=50
 
 source $TOP/tests/common
 
+# Allow child test to use $TOP and $RESULTS
+export TOP
+export RESULTS
+export LANG
+
 rm -f $RESULTS
 
 setup_root_helper
@@ -22,6 +27,26 @@ prepare_test_dev 512M
 
 CHECKSUMTMP=$(mktemp --tmpdir btrfs-progs-convert.XXXXXXXXXX)
 
+run_one_test() {
+	local testname
+
+	testname="$1"
+	echo "    [TEST/conv]   $testname"
+	cd $testname
+	echo "=== Entering $testname" >> $RESULTS
+	if [ -x test.sh ]; then
+		# Difference convert test case needs different
+		# tools to restore image, so only support custom
+		# test scripts
+		./test.sh
+		if [ $? -ne 0 ]; then
+			_fail "test failed for case $(basename $testname)"
+		fi
+	else
+		_fail "custom test script not found"
+	fi
+}
+
 generate_dataset() {
 
 	dataset_type="$1"
@@ -163,4 +188,9 @@ for feature in '' 'extref' 'skinny-metadata' 'no-holes'; do
 	convert_test "$feature" "ext4 64k nodesize" 65536 mke2fs -t ext4 -b 4096
 done
 
+for i in $(find $TOP/tests/convert-tests -maxdepth 1 -mindepth 1 -type d \
+	   ${TEST:+-name "$TEST"} | sort)
+do
+	run_one_test "$i"
+done
 rm $CHECKSUMTMP
diff --git a/tests/convert-tests/001-ext-backup-super-range/drdhdhdrd.e2image.raw.xz b/tests/convert-tests/001-ext-backup-super-range/drdhdhdrd.e2image.raw.xz
new file mode 100644
index 0000000000000000000000000000000000000000..73e2309c4bd6991424962c3bc53ad74171b52268
GIT binary patch
diff --git a/tests/convert-tests/001-ext-backup-super-range/drdhdhrh.e2image.raw.xz b/tests/convert-tests/001-ext-backup-super-range/drdhdhrh.e2image.raw.xz
new file mode 100644
index 0000000000000000000000000000000000000000..0d5442fffcd8106ed1fda52b317d0f4c3612fbe5
GIT binary patch
diff --git a/tests/convert-tests/001-ext-backup-super-range/hrhdhdrd.e2image.raw.xz b/tests/convert-tests/001-ext-backup-super-range/hrhdhdrd.e2image.raw.xz
new file mode 100644
index 0000000000000000000000000000000000000000..a1a304295f8c894a5db4b63dacbd3eb2fbc8420f
GIT binary patch
diff --git a/tests/convert-tests/001-ext-backup-super-range/hrhdhrh.e2image.raw.xz b/tests/convert-tests/001-ext-backup-super-range/hrhdhrh.e2image.raw.xz
new file mode 100644
index 0000000000000000000000000000000000000000..ac0dbc60ee6b0f8c374066c822b65d827c4a4da6
GIT binary patch
diff --git a/tests/convert-tests/001-ext-backup-super-range/test.sh b/tests/convert-tests/001-ext-backup-super-range/test.sh
new file mode 100755
index 0000000..fa41cca
--- /dev/null
+++ b/tests/convert-tests/001-ext-backup-super-range/test.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+# Specially created e2image dump to test backup superblock migration for
+# new convert.
+# These images will cause the following problem if convert doesn't handle
+# backup superblock well:
+# 1) Assert while building free space tree
+# 2) Error copying inodes
+# 3) Discontinuous file extents after convert
+# 4) Overlap file extents
+# 5) Unable to rollback
+
+source $TOP/tests/common
+
+check_prereq btrfs-convert
+check_prereq btrfs
+check_prereq btrfs-show-super
+check_global_prereq e2fsck
+check_global_prereq xzcat
+
+prepare_test_dev 512M
+for src in $(find . -iname "*.e2image.raw.xz"); do
+	image=${src%%.xz}
+	rm $image -f &> /dev/null
+
+	xz --decompress --keep $src ||
+		_fail "failed to decompress image $image" >&2
+
+	run_check $SUDO_HELPER e2fsck -n -f $image
+	run_check $SUDO_HELPER $TOP/btrfs-convert $image
+	run_check $SUDO_HELPER $TOP/btrfs check $image
+	run_check $SUDO_HELPER $TOP/btrfs-show-super $image
+
+	run_check $SUDO_HELPER mount -o loop $image $TEST_MNT
+	run_check $SUDO_HELPER e2fsck -n -f $TEST_MNT/ext2_saved/image
+	run_check $SUDO_HELPER umount $TEST_MNT
+
+	run_check $SUDO_HELPER $TOP/btrfs check $image
+	run_check $SUDO_HELPER $TOP/btrfs-convert -r $image
+	run_check $SUDO_HELPER e2fsck -n -f $image
+	rm $image -f
+done
+
