All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] squashfs: introduce squashfs support
@ 2019-01-18  9:37 zhengbin
  2019-01-18  9:37 ` [PATCH 1/1] squashfs: add squashfs tests zhengbin
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: zhengbin @ 2019-01-18  9:37 UTC (permalink / raw)
  To: guaneryu, fstests; +Cc: houtao1, zhaohongjiang, zhengbin13

This patch add squashfs support in xfstests-dev. Add two directories
in tests directory, readonly can also be used for other readonly
filesystem, squashfs is just used for squashfs filesystem.
tests/readonly/001        mount test
tests/readonly/002--010   metadata test
tests/readonly/011--018   data test
tests/readonly/019--021   xattr test
tests/squashfs/001--005   mksquashfs options test

zhengbin (1):
  squashfs: add squashfs tests

 .gitignore                                  |   1 +
 README.squashfs                             |  12 ++
 check                                       |  19 ++-
 common/attr                                 |   5 +
 common/config                               |   6 +
 common/rc                                   |  63 ++++++++-
 src/aio-dio-regress/aio-subblock-eof-read.c |  84 ++++++++++++
 tests/readonly/001                          |  97 ++++++++++++++
 tests/readonly/001.out                      |   2 +
 tests/readonly/002                          |  48 +++++++
 tests/readonly/002.out                      |   6 +
 tests/readonly/003                          |  72 +++++++++++
 tests/readonly/003.out                      |   5 +
 tests/readonly/004                          |  50 +++++++
 tests/readonly/004.out                      |   3 +
 tests/readonly/005                          |  77 +++++++++++
 tests/readonly/005.out                      |   2 +
 tests/readonly/006                          |  48 +++++++
 tests/readonly/006.out                      |   4 +
 tests/readonly/007                          |  74 +++++++++++
 tests/readonly/007.out                      |   9 ++
 tests/readonly/008                          | 193 ++++++++++++++++++++++++++++
 tests/readonly/008.out                      |  34 +++++
 tests/readonly/009                          |  50 +++++++
 tests/readonly/009.out                      |   2 +
 tests/readonly/010                          |  49 +++++++
 tests/readonly/010.out                      |   4 +
 tests/readonly/011                          |  92 +++++++++++++
 tests/readonly/011.out                      |  30 +++++
 tests/readonly/012                          |  56 ++++++++
 tests/readonly/012.out                      |   5 +
 tests/readonly/013                          |  47 +++++++
 tests/readonly/013.out                      |   2 +
 tests/readonly/014                          |  46 +++++++
 tests/readonly/014.out                      |   2 +
 tests/readonly/015                          |  42 ++++++
 tests/readonly/015.out                      |   2 +
 tests/readonly/016                          | 145 +++++++++++++++++++++
 tests/readonly/016.out                      |   8 ++
 tests/readonly/017                          | 107 +++++++++++++++
 tests/readonly/017.out                      |   2 +
 tests/readonly/018                          |  49 +++++++
 tests/readonly/018.out                      |   2 +
 tests/readonly/019                          | 109 ++++++++++++++++
 tests/readonly/019.out                      |  45 +++++++
 tests/readonly/020                          |  56 ++++++++
 tests/readonly/020.out                      |   9 ++
 tests/readonly/021                          |  74 +++++++++++
 tests/readonly/021.out                      |  11 ++
 tests/readonly/Makefile                     |  20 +++
 tests/readonly/group                        |  26 ++++
 tests/squashfs/001                          |  60 +++++++++
 tests/squashfs/001.out                      |   9 ++
 tests/squashfs/002                          |  40 ++++++
 tests/squashfs/002.out                      |   2 +
 tests/squashfs/003                          |  55 ++++++++
 tests/squashfs/003.out                      |  12 ++
 tests/squashfs/004                          |  73 +++++++++++
 tests/squashfs/004.out                      |  23 ++++
 tests/squashfs/005                          |  54 ++++++++
 tests/squashfs/005.out                      |  13 ++
 tests/squashfs/Makefile                     |  20 +++
 tests/squashfs/group                        |  10 ++
 63 files changed, 2372 insertions(+), 5 deletions(-)
 create mode 100644 README.squashfs
 create mode 100644 src/aio-dio-regress/aio-subblock-eof-read.c
 create mode 100755 tests/readonly/001
 create mode 100644 tests/readonly/001.out
 create mode 100755 tests/readonly/002
 create mode 100644 tests/readonly/002.out
 create mode 100755 tests/readonly/003
 create mode 100644 tests/readonly/003.out
 create mode 100755 tests/readonly/004
 create mode 100644 tests/readonly/004.out
 create mode 100755 tests/readonly/005
 create mode 100644 tests/readonly/005.out
 create mode 100755 tests/readonly/006
 create mode 100644 tests/readonly/006.out
 create mode 100755 tests/readonly/007
 create mode 100644 tests/readonly/007.out
 create mode 100755 tests/readonly/008
 create mode 100644 tests/readonly/008.out
 create mode 100755 tests/readonly/009
 create mode 100644 tests/readonly/009.out
 create mode 100755 tests/readonly/010
 create mode 100644 tests/readonly/010.out
 create mode 100755 tests/readonly/011
 create mode 100644 tests/readonly/011.out
 create mode 100755 tests/readonly/012
 create mode 100644 tests/readonly/012.out
 create mode 100755 tests/readonly/013
 create mode 100644 tests/readonly/013.out
 create mode 100755 tests/readonly/014
 create mode 100644 tests/readonly/014.out
 create mode 100755 tests/readonly/015
 create mode 100644 tests/readonly/015.out
 create mode 100755 tests/readonly/016
 create mode 100644 tests/readonly/016.out
 create mode 100755 tests/readonly/017
 create mode 100644 tests/readonly/017.out
 create mode 100755 tests/readonly/018
 create mode 100644 tests/readonly/018.out
 create mode 100755 tests/readonly/019
 create mode 100644 tests/readonly/019.out
 create mode 100755 tests/readonly/020
 create mode 100644 tests/readonly/020.out
 create mode 100755 tests/readonly/021
 create mode 100644 tests/readonly/021.out
 create mode 100644 tests/readonly/Makefile
 create mode 100644 tests/readonly/group
 create mode 100755 tests/squashfs/001
 create mode 100644 tests/squashfs/001.out
 create mode 100755 tests/squashfs/002
 create mode 100644 tests/squashfs/002.out
 create mode 100755 tests/squashfs/003
 create mode 100644 tests/squashfs/003.out
 create mode 100755 tests/squashfs/004
 create mode 100644 tests/squashfs/004.out
 create mode 100755 tests/squashfs/005
 create mode 100644 tests/squashfs/005.out
 create mode 100644 tests/squashfs/Makefile
 create mode 100644 tests/squashfs/group

--
2.16.2.dirty

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/1] squashfs: add squashfs tests
  2019-01-18  9:37 [PATCH 0/1] squashfs: introduce squashfs support zhengbin
@ 2019-01-18  9:37 ` zhengbin
  2019-01-18 12:43 ` [PATCH 0/1] squashfs: introduce squashfs support Eryu Guan
  2019-01-21 22:49 ` Dave Chinner
  2 siblings, 0 replies; 5+ messages in thread
From: zhengbin @ 2019-01-18  9:37 UTC (permalink / raw)
  To: guaneryu, fstests; +Cc: houtao1, zhaohongjiang, zhengbin13

This patch add squashfs support in xfstests-dev. Add two directories
in tests directory, readonly can also be used for other readonly
filesystem, squashfs is just used for squashfs filesystem.

Signed-off-by: zhengbin <zhengbin13@huawei.com>
---
 .gitignore                                  |   1 +
 README.squashfs                             |  12 ++
 check                                       |  19 ++-
 common/attr                                 |   5 +
 common/config                               |   6 +
 common/rc                                   |  63 ++++++++-
 src/aio-dio-regress/aio-subblock-eof-read.c |  84 ++++++++++++
 tests/readonly/001                          |  97 ++++++++++++++
 tests/readonly/001.out                      |   2 +
 tests/readonly/002                          |  48 +++++++
 tests/readonly/002.out                      |   6 +
 tests/readonly/003                          |  72 +++++++++++
 tests/readonly/003.out                      |   5 +
 tests/readonly/004                          |  50 +++++++
 tests/readonly/004.out                      |   3 +
 tests/readonly/005                          |  77 +++++++++++
 tests/readonly/005.out                      |   2 +
 tests/readonly/006                          |  48 +++++++
 tests/readonly/006.out                      |   4 +
 tests/readonly/007                          |  74 +++++++++++
 tests/readonly/007.out                      |   9 ++
 tests/readonly/008                          | 193 ++++++++++++++++++++++++++++
 tests/readonly/008.out                      |  34 +++++
 tests/readonly/009                          |  50 +++++++
 tests/readonly/009.out                      |   2 +
 tests/readonly/010                          |  49 +++++++
 tests/readonly/010.out                      |   4 +
 tests/readonly/011                          |  92 +++++++++++++
 tests/readonly/011.out                      |  30 +++++
 tests/readonly/012                          |  56 ++++++++
 tests/readonly/012.out                      |   5 +
 tests/readonly/013                          |  47 +++++++
 tests/readonly/013.out                      |   2 +
 tests/readonly/014                          |  46 +++++++
 tests/readonly/014.out                      |   2 +
 tests/readonly/015                          |  42 ++++++
 tests/readonly/015.out                      |   2 +
 tests/readonly/016                          | 145 +++++++++++++++++++++
 tests/readonly/016.out                      |   8 ++
 tests/readonly/017                          | 107 +++++++++++++++
 tests/readonly/017.out                      |   2 +
 tests/readonly/018                          |  49 +++++++
 tests/readonly/018.out                      |   2 +
 tests/readonly/019                          | 109 ++++++++++++++++
 tests/readonly/019.out                      |  45 +++++++
 tests/readonly/020                          |  56 ++++++++
 tests/readonly/020.out                      |   9 ++
 tests/readonly/021                          |  74 +++++++++++
 tests/readonly/021.out                      |  11 ++
 tests/readonly/Makefile                     |  20 +++
 tests/readonly/group                        |  26 ++++
 tests/squashfs/001                          |  60 +++++++++
 tests/squashfs/001.out                      |   9 ++
 tests/squashfs/002                          |  40 ++++++
 tests/squashfs/002.out                      |   2 +
 tests/squashfs/003                          |  55 ++++++++
 tests/squashfs/003.out                      |  12 ++
 tests/squashfs/004                          |  73 +++++++++++
 tests/squashfs/004.out                      |  23 ++++
 tests/squashfs/005                          |  54 ++++++++
 tests/squashfs/005.out                      |  13 ++
 tests/squashfs/Makefile                     |  20 +++
 tests/squashfs/group                        |  10 ++
 63 files changed, 2372 insertions(+), 5 deletions(-)
 create mode 100644 README.squashfs
 create mode 100644 src/aio-dio-regress/aio-subblock-eof-read.c
 create mode 100755 tests/readonly/001
 create mode 100644 tests/readonly/001.out
 create mode 100755 tests/readonly/002
 create mode 100644 tests/readonly/002.out
 create mode 100755 tests/readonly/003
 create mode 100644 tests/readonly/003.out
 create mode 100755 tests/readonly/004
 create mode 100644 tests/readonly/004.out
 create mode 100755 tests/readonly/005
 create mode 100644 tests/readonly/005.out
 create mode 100755 tests/readonly/006
 create mode 100644 tests/readonly/006.out
 create mode 100755 tests/readonly/007
 create mode 100644 tests/readonly/007.out
 create mode 100755 tests/readonly/008
 create mode 100644 tests/readonly/008.out
 create mode 100755 tests/readonly/009
 create mode 100644 tests/readonly/009.out
 create mode 100755 tests/readonly/010
 create mode 100644 tests/readonly/010.out
 create mode 100755 tests/readonly/011
 create mode 100644 tests/readonly/011.out
 create mode 100755 tests/readonly/012
 create mode 100644 tests/readonly/012.out
 create mode 100755 tests/readonly/013
 create mode 100644 tests/readonly/013.out
 create mode 100755 tests/readonly/014
 create mode 100644 tests/readonly/014.out
 create mode 100755 tests/readonly/015
 create mode 100644 tests/readonly/015.out
 create mode 100755 tests/readonly/016
 create mode 100644 tests/readonly/016.out
 create mode 100755 tests/readonly/017
 create mode 100644 tests/readonly/017.out
 create mode 100755 tests/readonly/018
 create mode 100644 tests/readonly/018.out
 create mode 100755 tests/readonly/019
 create mode 100644 tests/readonly/019.out
 create mode 100755 tests/readonly/020
 create mode 100644 tests/readonly/020.out
 create mode 100755 tests/readonly/021
 create mode 100644 tests/readonly/021.out
 create mode 100644 tests/readonly/Makefile
 create mode 100644 tests/readonly/group
 create mode 100755 tests/squashfs/001
 create mode 100644 tests/squashfs/001.out
 create mode 100755 tests/squashfs/002
 create mode 100644 tests/squashfs/002.out
 create mode 100755 tests/squashfs/003
 create mode 100644 tests/squashfs/003.out
 create mode 100755 tests/squashfs/004
 create mode 100644 tests/squashfs/004.out
 create mode 100755 tests/squashfs/005
 create mode 100644 tests/squashfs/005.out
 create mode 100644 tests/squashfs/Makefile
 create mode 100644 tests/squashfs/group

diff --git a/.gitignore b/.gitignore
index ea1aac8a..d9886427 100644
--- a/.gitignore
+++ b/.gitignore
@@ -159,6 +159,7 @@
 /src/aio-dio-regress/aio-dio-hole-filling-race
 /src/aio-dio-regress/aio-dio-invalidate-failure
 /src/aio-dio-regress/aio-dio-invalidate-readahead
+/src/aio-dio-regress/aio-subblock-eof-read
 /src/aio-dio-regress/aio-dio-subblock-eof-read
 /src/aio-dio-regress/aio-free-ring-with-bogus-nr-pages
 /src/aio-dio-regress/aio-io-setup-with-nonwritable-context-pointer
diff --git a/README.squashfs b/README.squashfs
new file mode 100644
index 00000000..34b9ade8
--- /dev/null
+++ b/README.squashfs
@@ -0,0 +1,12 @@
+To run xfstest on squashfs, configure the variables of TEST and SCRATCH
+directories to be used as the "base fs" and run './check -squashfs'.
+
+For example, the following config file can be used to run tests on
+xfs test/scratch directories:
+
+ TEST_DEV=/root/test
+ TEST_DIR=/mnt/test
+ SCRATCH_DEV=/root/scratch
+ SCRATCH_MNT=/mnt/scratch
+
+TEST_DEV and SCRATCH_DEV should be directories.
diff --git a/check b/check
index 77a06b00..898ca2d5 100755
--- a/check
+++ b/check
@@ -45,6 +45,7 @@ timestamp=${TIMESTAMP:=false}
 rm -f $tmp.list $tmp.tmp $tmp.grep $here/$iam.out $tmp.xlist $tmp.report.*

 SRC_GROUPS="generic shared"
+SRC_READONLY_GROUPS="readonly"
 export SRC_DIR="tests"

 usage()
@@ -60,6 +61,7 @@ check options
     -pvfs2          test PVFS2
     -tmpfs              test TMPFS
     -ubifs              test ubifs
+    -squashfs		test squashfs
     -l			line mode diff
     -udiff		show unified diff (default)
     -n			show me, do not run tests
@@ -111,6 +113,16 @@ examples:
 	    exit 0
 }

+# Get Source group, if fstyp is readonly, use tests/readonly dir
+get_src_group()
+{
+	local grp=$SRC_GROUPS
+	if [ "$FSTYP" == "squashfs" ]; then
+		grp=$SRC_READONLY_GROUPS
+	fi
+	echo $grp
+}
+
 get_sub_group_list()
 {
 	local d=$1
@@ -138,7 +150,7 @@ get_group_list()
 		return
 	fi

-	for d in $SRC_GROUPS $FSTYP; do
+	for d in $(get_src_group) $FSTYP; do
 		if ! test -d "$SRC_DIR/$d" ; then
 			continue
 		fi
@@ -152,7 +164,7 @@ get_group_list()
 get_all_tests()
 {
 	touch $tmp.list
-	for d in $SRC_GROUPS $FSTYP; do
+	for d in $(get_src_group) $FSTYP; do
 		if ! test -d "$SRC_DIR/$d" ; then
 			continue
 		fi
@@ -258,6 +270,7 @@ while [ $# -gt 0 ]; do

 	-nfs)		FSTYP=nfs ;;
 	-glusterfs)	FSTYP=glusterfs ;;
+	-squashfs)      FSTYP=squashfs ;;
 	-cifs)		FSTYP=cifs ;;
 	-9p)		FSTYP=9p ;;
 	-overlay)	FSTYP=overlay; export OVERLAY=true ;;
@@ -321,7 +334,7 @@ if ! . ./common/rc; then
 fi

 if [ -n "$subdir_xfile" ]; then
-	for d in $SRC_GROUPS $FSTYP; do
+	for d in $(get_src_group) $FSTYP; do
 		[ -f $SRC_DIR/$d/$subdir_xfile ] || continue
 		for f in `sed "s/#.*$//" $SRC_DIR/$d/$subdir_xfile`; do
 			echo $d/$f >> $tmp.xlist
diff --git a/common/attr b/common/attr
index 20049de0..845ed88e 100644
--- a/common/attr
+++ b/common/attr
@@ -179,6 +179,11 @@ _require_attrs()
     [ -n "$GETFATTR_PROG" ] || _notrun "getfattr command not found"
     [ -n "$SETFATTR_PROG" ] || _notrun "setfattr command not found"

+    if [ "$FSTYP" == "squashfs" ]; then
+	# squashfs is a readonly filesystem, can not touch file
+	return
+    fi
+
     #
     # Test if chacl is able to write an attribute on the target filesystems.
     # On really old kernels the system calls might not be implemented at all,
diff --git a/common/config b/common/config
index 64f87057..ef507d1d 100644
--- a/common/config
+++ b/common/config
@@ -223,6 +223,7 @@ case "$HOSTOS" in
     Linux)
 	export MKFS_XFS_PROG=$(type -P mkfs.xfs)
 	export MKFS_EXT4_PROG=$(type -P mkfs.ext4)
+	export MKFS_SQUASHFS_PROG=$(type -P mksquashfs)
 	export MKFS_UDF_PROG=$(type -P mkudffs)
 	export MKFS_BTRFS_PROG=$(set_mkfs_prog_path_with_opts btrfs)
 	export MKFS_F2FS_PROG=$(set_mkfs_prog_path_with_opts f2fs)
@@ -474,6 +475,11 @@ _check_device()
 			_fatal "common/config: $name ($dev) is not a directory for overlay"
 		fi
 		;;
+	squashfs)
+		if [ ! -d "$dev" ]; then
+			_fatal "common/config: $name ($dev) is not a directory for squashfs"
+		fi
+		;;
 	ubifs)
 		if [ ! -c "$dev" ]; then
 			_fatal "common/config: $name ($dev) is not a character device"
diff --git a/common/rc b/common/rc
index b8ed1776..39810342 100644
--- a/common/rc
+++ b/common/rc
@@ -6,6 +6,9 @@

 BC=$(which bc 2> /dev/null) || BC=

+# compress file for readonly filesystem(squashfs)
+export SCRATCH_COMPRESS_FILE=$SCRATCH_DEV/scratch_compress_file
+
 # Some tests are not relevant or functional when testing XFS realtime
 # subvolumes along with the rtinherit=1 mkfs option.  In these cases,
 # this test will opt-out of the test.
@@ -133,6 +136,9 @@ case "$FSTYP" in
     ext4)
 	 [ "$MKFS_EXT4_PROG" = "" ] && _fatal "mkfs.ext4 not found"
 	 ;;
+    squashfs)
+	 [ "$MKFS_SQUASHFS_PROG" = "" ] && _fatal "mksquashfs not found"
+	 ;;
     f2fs)
 	 [ "$MKFS_F2FS_PROG" = "" ] && _fatal "mkfs.f2fs not found"
 	 ;;
@@ -327,6 +333,9 @@ _try_scratch_mount()
 	if [ "$FSTYP" == "overlay" ]; then
 		_overlay_scratch_mount $*
 		return $?
+	elif [ "$FSTYP" == "squashfs" ]; then
+		_mount -t $FSTYP $SCRATCH_OPTIONS $* $SCRATCH_COMPRESS_FILE $SCRATCH_MNT
+		return $?
 	fi
 	_mount -t $FSTYP `_scratch_mount_options $*`
 }
@@ -343,7 +352,7 @@ _scratch_unmount()
 	overlay)
 		_overlay_scratch_unmount
 		;;
-	btrfs)
+	btrfs|squashfs)
 		$UMOUNT_PROG $SCRATCH_MNT
 		;;
 	*)
@@ -398,6 +407,9 @@ _test_mount()
     if [ "$FSTYP" == "overlay" ]; then
         _overlay_test_mount $*
         return $?
+    elif [ "$FSTYP" == "squashfs" ]; then
+	# squashfs do not use TEST_DEV, TEST_DIR, just return
+	return 0
     fi
     _test_options mount
     _mount -t $FSTYP $TEST_OPTIONS $TEST_FS_MOUNT_OPTS $SELINUX_MOUNT_OPTIONS $* $TEST_DEV $TEST_DIR
@@ -407,6 +419,9 @@ _test_unmount()
 {
 	if [ "$FSTYP" == "overlay" ]; then
 		_overlay_test_unmount
+	elif [ "$FSTYP" == "squashfs" ]; then
+		# squashfs do not use TEST_DEV, TEST_DIR, just return
+		return
 	else
 		$UMOUNT_PROG $TEST_DEV
 	fi
@@ -580,6 +595,28 @@ _scratch_mkfs_ext4()
 	return $mkfs_status
 }

+_scratch_mkfs_squashfs()
+{
+	local mkfs_cmd="$MKFS_SQUASHFS_PROG"
+	local mkfs_filter="grep -v -e ^Warning: -e \"^mke2fs \""
+	mkdir -p /tmp
+	rm -f $SCRATCH_COMPRESS_FILE
+	local mkfs_status
+	local tmp=`mktemp -u`
+	local extra_mkfs_options=$*
+
+	eval "$mkfs_cmd $SCRATCH_DEV $SCRATCH_COMPRESS_FILE $MKFS_OPTIONS $extra_mkfs_options" \
+	  2>$tmp.mkfserr 1>$tmp.mkfsstd
+	mkfs_status=$?
+
+	# output stored mkfs output, filtering unnecessary output from stderr
+	cat $tmp.mkfsstd
+	eval "cat $tmp.mkfserr | $mkfs_filter" >&2
+
+	rm -f $tmp.mkfserr $tmp.mkfsstd
+	return $mkfs_status
+}
+
 _test_mkfs()
 {
     case $FSTYP in
@@ -613,6 +650,9 @@ _test_mkfs()
     ext2|ext3|ext4)
 	$MKFS_PROG -t $FSTYP -- -F $MKFS_OPTIONS $* $TEST_DEV
 	;;
+    squashfs)
+	# squashfs do not use TEST_DEV, TEST_DIR, just return
+	;;
     *)
 	yes | $MKFS_PROG -t $FSTYP -- $MKFS_OPTIONS $* $TEST_DEV
 	;;
@@ -713,6 +753,10 @@ _scratch_mkfs()
 		_scratch_mkfs_ext4 $*
 		return $?
 		;;
+	squashfs)
+		_scratch_mkfs_squashfs $*
+		return $?
+		;;
 	xfs)
 		_scratch_mkfs_xfs $*
 		return $?
@@ -1505,6 +1549,18 @@ _require_scratch_nocheck()
 		    _notrun "this test requires a valid \$SCRATCH_MNT and unique $SCRATCH_DEV"
 		fi
 		;;
+	squashfs)
+		if [ ! -d "$SCRATCH_DEV" ]; then
+			_notrun "this test requires a valid \$SCRATCH_DEV"
+		fi
+		if [ ! -d "$SCRATCH_MNT" ]; then
+			_notrun "this test requires a valid \$SCRATCH_MNT"
+		fi
+		# umount SCRATCH_MNT
+		_scratch_unmount >/dev/null 2>&1
+		rm -f ${RESULT_DIR}/require_scratch
+		return
+		;;
 	ubifs)
 		# ubifs needs an UBI volume. This will be a char device, not a block device.
 		if [ ! -c "$SCRATCH_DEV" ]; then
@@ -3599,7 +3655,10 @@ init_rc()

 	# Sanity check that TEST partition is not mounted at another mount point
 	# or as another fs type
-	_check_mounted_on TEST_DEV $TEST_DEV TEST_DIR $TEST_DIR $FSTYP || exit 1
+	# if fs type is squashfs, do not check mount on TEST_DEV TEST_DIR
+	if [ "$FSTYP" != "squashfs" ]; then
+		_check_mounted_on TEST_DEV $TEST_DEV TEST_DIR $TEST_DIR $FSTYP || exit 1
+	fi
 	if [ -n "$SCRATCH_DEV" ]; then
 		# Sanity check that SCRATCH partition is not mounted at another
 		# mount point, because it is about to be unmounted and formatted.
diff --git a/src/aio-dio-regress/aio-subblock-eof-read.c b/src/aio-dio-regress/aio-subblock-eof-read.c
new file mode 100644
index 00000000..24f03f93
--- /dev/null
+++ b/src/aio-dio-regress/aio-subblock-eof-read.c
@@ -0,0 +1,84 @@
+/*  SPDX-License-Identifier: GPL-2.0+
+ * Copyright (C) 2005 Jeff Moyer
+ * Copyright (C) 2019 zhengbin
+ *
+ * Test AIO read of last block of file
+ *
+ * Code taken from aio-dio-subblock-eof-read.c
+ * Munged by zhengbin
+ *
+ * Description:  This source code implements a test to ensure that an AIO
+ * read of the last block in a file opened with  returns the proper
+ * amount of data.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <libaio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#define fail(fmt, args...)	\
+do {				\
+	printf(fmt, ##args);	\
+	exit(1);		\
+} while (0)
+
+static unsigned char buffer[4096] __attribute((aligned(4096)));
+
+int main(int argc, char **argv)
+{
+	int ret;
+	int fd;
+	int filesize;
+	const char *filename;
+	struct iocb myiocb;
+	struct iocb *cb = &myiocb;
+	io_context_t ioctx;
+	struct io_event ie;
+
+	if (argc != 3)
+		fail("Usage: %s filename filesize\n", argv[0]);
+
+	filename = argv[1];
+	fd = open(filename, O_RDONLY, 0600);
+	if (fd < 0)
+		fail("open returned error %d\n", errno);
+
+	filesize = atoi(argv[2]);
+
+	/* <1> use normal disk read, this should be ok */
+	ret = read(fd, buffer, 4096);
+	if (ret != filesize)
+		fail("buffered read returned %d, should be 300\n", ret);
+
+	/* <2> use AIO disk read, it sees error. */
+	memset(&myiocb, 0, sizeof(myiocb));
+	cb->data = 0;
+	cb->key = 0;
+	cb->aio_lio_opcode = IO_CMD_PREAD;
+	cb->aio_reqprio = 0;
+	cb->aio_fildes = fd;
+	cb->u.c.buf = buffer;
+	cb->u.c.nbytes = 4096;
+	cb->u.c.offset = 0;
+
+	ret = io_queue_init(1, &ioctx);
+	if (ret != 0)
+		fail("io_queue_init returned error %d\n", ret);
+
+	ret = io_submit(ioctx, 1, &cb);
+	if (ret != 1)
+		fail("io_submit returned error %d\n", ret);
+
+	ret = io_getevents(ioctx, 1, 1, &ie, NULL);
+	if (ret != 1)
+		fail("io_getevents returned %d\n", ret);
+
+	if (ie.res != filesize)
+		fail("AIO read of last block in file returned %ld bytes, "
+		     "expected %d\n", ie.res, filesize);
+
+	printf("AIO read of last block in file succeeded.\n");
+	return 0;
+}
diff --git a/tests/readonly/001 b/tests/readonly/001
new file mode 100755
index 00000000..164722d2
--- /dev/null
+++ b/tests/readonly/001
@@ -0,0 +1,97 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2015 Red Hat Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 001. Modifed from generic/067.
+#
+# Some random mount/umount corner case tests
+#
+# - mount at a nonexistent mount point
+# - mount a free loop device
+# - mount with a wrong fs type specified
+# - umount an symlink to device which is not mounted
+# - umount a path with too long name
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_loop
+
+rm -f $seqres.full
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+
+# kernel should not hang nor oops when mounting fs to nonexistent mount point
+mount_nonexistent_mnt()
+{
+	echo "# mount to nonexistent mount point" >>$seqres.full
+	rm -rf $SCRATCH_DEV/nosuchdir
+	$MOUNT_PROG -t $FSTYP $SCRATCH_COMPRESS_FILE $SCRATCH_DEV/nosuchdir >>$seqres.full 2>&1
+}
+
+# fs driver should be able to handle mounting a free loop device gracefully
+# xfs ever hung, "ec53d1d xfs: don't block on buffer read errors" fixed it
+mount_free_loopdev()
+{
+	echo "# mount a free loop device" >>$seqres.full
+	loopdev=`losetup -f`
+	$MOUNT_PROG -t $FSTYP $loopdev $SCRATCH_MNT >>$seqres.full 2>&1
+}
+
+# mount with wrong fs type specified.
+# This should fail gracefully, no hang no oops are expected
+mount_wrong_fstype()
+{
+	local fs=ext4
+	echo "# mount with wrong fs type" >>$seqres.full
+	$MOUNT_PROG -t $fs $SCRATCH_COMPRESS_FILE $SCRATCH_MNT >>$seqres.full 2>&1
+}
+
+# umount a symlink to device, which is not mounted.
+# This should fail gracefully, no hang no oops are expected
+umount_symlink_device()
+{
+	local symlink=$SCRATCH_DEV/$seq.scratch_dev_symlink
+	rm -f $symlink
+	echo "# umount symlink to device, which is not mounted" >>$seqres.full
+	ln -s $SCRATCH_COMPRESS_FILE $symlink
+	$UMOUNT_PROG $symlink >>$seqres.full 2>&1
+	rm -f $symlink
+}
+
+# umount a path name that is 256 bytes long, this should fail gracefully,
+# and the following umount should not hang nor oops
+umount_toolong_name()
+{
+	local longname=$SCRATCH_MNT/`$PERL_PROG -e 'print "a"x256;'`
+
+	_scratch_mount 2>&1 | tee -a $seqres.full
+
+	echo "# umount a too-long name" >>$seqres.full
+	$UMOUNT_PROG $longname >>$seqres.full 2>&1
+	_scratch_unmount 2>&1 | tee -a $seqres.full
+}
+
+mount_nonexistent_mnt
+mount_free_loopdev
+mount_wrong_fstype
+
+umount_symlink_device
+umount_toolong_name
+
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/readonly/001.out b/tests/readonly/001.out
new file mode 100644
index 00000000..88678b8e
--- /dev/null
+++ b/tests/readonly/001.out
@@ -0,0 +1,2 @@
+QA output created by 001
+Silence is golden
diff --git a/tests/readonly/002 b/tests/readonly/002
new file mode 100755
index 00000000..eb3824d2
--- /dev/null
+++ b/tests/readonly/002
@@ -0,0 +1,48 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei, Inc.  All Rights Reserved.
+#
+# FS QA Test No. 002
+#
+# Test metadata write/soft link/hard link on a RO fs
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+testfile=$SCRATCH_DEV/testfile
+rm -f $testfile
+touch $testfile
+
+_scratch_mkfs  > /dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+testfile=$SCRATCH_MNT/testfile
+
+chown 1 $testfile 2>&1 | _filter_scratch
+chgrp 1 $testfile 2>&1 | _filter_scratch
+chmod 777 $testfile 2>&1 | _filter_scratch
+
+ln -s $testfile $SCRATCH_MNT/linkfile 2>&1 | _filter_scratch
+ln $testfile $SCRATCH_MNT/hardfile 2>&1 | _filter_scratch
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/002.out b/tests/readonly/002.out
new file mode 100644
index 00000000..3e5132b2
--- /dev/null
+++ b/tests/readonly/002.out
@@ -0,0 +1,6 @@
+QA output created by 002
+chown: changing ownership of 'SCRATCH_MNT/testfile': Read-only file system
+chgrp: changing group of 'SCRATCH_MNT/testfile': Read-only file system
+chmod: changing permissions of 'SCRATCH_MNT/testfile': Read-only file system
+ln: failed to create symbolic link 'SCRATCH_MNT/linkfile': Read-only file system
+ln: failed to create hard link 'SCRATCH_MNT/hardfile': Read-only file system
diff --git a/tests/readonly/003 b/tests/readonly/003
new file mode 100755
index 00000000..fc9577cc
--- /dev/null
+++ b/tests/readonly/003
@@ -0,0 +1,72 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2008 Silicon Graphics, Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei, Inc.  All Rights Reserved.
+#
+# FS QA Test No. 003. Modifed from generic/192.
+#
+# Simple test of atime
+# - ensure it is persistent after unmount
+# - check atime not updated after cat in readonly fs
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+}
+
+_access_time()
+{
+	stat -c %X $1
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_atime
+
+delay=2
+testfile=$SCRATCH_DEV/testfile
+rm -f $testfile
+rm -f $seqres.full
+
+echo test >$testfile
+
+_scratch_mkfs > /dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+testfile=$SCRATCH_MNT/testfile
+
+time1=`_access_time $testfile | tee -a $seqres.full`
+
+echo "sleep for $delay seconds"
+sleep $delay # sleep to allow time to move on for access
+cat $testfile
+time2=`_access_time $testfile | tee -a $seqres.full`
+
+cd /
+_scratch_cycle_mount
+time3=`_access_time $testfile | tee -a $seqres.full`
+
+delta1=`expr $time2 - $time1`
+delta2=`expr $time3 - $time1`
+
+# readonly file system do not update atime
+_within_tolerance "delta1" $delta1 0 0 0 -v
+_within_tolerance "delta2" $delta2 $delta1 0 0 -v
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/003.out b/tests/readonly/003.out
new file mode 100644
index 00000000..ae2fe728
--- /dev/null
+++ b/tests/readonly/003.out
@@ -0,0 +1,5 @@
+QA output created by 003
+sleep for 2 seconds
+test
+delta1 is in range
+delta2 is in range
diff --git a/tests/readonly/004 b/tests/readonly/004
new file mode 100755
index 00000000..352fbff1
--- /dev/null
+++ b/tests/readonly/004
@@ -0,0 +1,50 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2011 Red Hat, Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei, Inc.  All Rights Reserved.
+#
+# FS QA Test No. 004. Modifed from generic/258.
+#
+# Test timestamps prior to epoch
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/timestamp-test.txt
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+TESTFILE=$SCRATCH_DEV/timestamp-test.txt
+
+# Create a file with a timestamp prior to the epoch
+echo "Creating file with timestamp of Jan 1, 1960"
+touch -t 196001010101 $TESTFILE
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+TESTFILE=$SCRATCH_MNT/timestamp-test.txt
+
+# Should yield -315593940 (prior to epoch)
+echo "Testing for negative seconds since epoch"
+ts=`stat -c %X $TESTFILE`
+if [ "$ts" -ge 0 ]; then
+	echo "Timestamp wrapped: $ts"
+	_fail "Timestamp wrapped"
+fi
+
+status=0
+exit
diff --git a/tests/readonly/004.out b/tests/readonly/004.out
new file mode 100644
index 00000000..2935bba1
--- /dev/null
+++ b/tests/readonly/004.out
@@ -0,0 +1,3 @@
+QA output created by 004
+Creating file with timestamp of Jan 1, 1960
+Testing for negative seconds since epoch
diff --git a/tests/readonly/005 b/tests/readonly/005
new file mode 100755
index 00000000..2633a742
--- /dev/null
+++ b/tests/readonly/005
@@ -0,0 +1,77 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2014, Oracle and/or its affiliates.  All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 005. Modifed from generic/003.
+#
+# Access time should never be updated in readonly fs, despite the
+# strictatime mount option.
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/file1
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+_stat() {
+	stat -c "%x;%y;%z" $1
+}
+
+_compare_stat_times() {
+	updated=$1	# 3 chars indicating if access, modify and
+			# change times should be updated (Y) or not (N)
+	IFS=';' read -a first_stat <<< "$2"   # Convert first stat to array
+	IFS=';' read -a second_stat <<< "$3"  # Convert second stat to array
+	test_step=$4	# Will be printed to output stream in case of an
+			# error, to make debugging easier
+	types=( access modify change )
+
+	for i in 0 1 2; do
+		if [ "${first_stat[$i]}" == "${second_stat[$i]}" ]; then
+			if [ "${updated:$i:1}" == "N" ]; then
+				continue;
+			fi
+			echo -n "ERROR: ${types[$i]} time has not been updated "
+			echo $test_step
+		elif [ "${updated:$i:1}" == "N" ]; then
+			echo -n "ERROR: ${types[$i]} time has changed "
+			echo $test_step
+		fi
+	done
+}
+
+rm -f $SCRATCH_DEV/file1
+echo "test" >$SCRATCH_DEV/file1
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount "-o strictatime"
+
+file1_stat_before_first_access=`_stat $SCRATCH_MNT/file1`
+
+sleep 2
+
+cat $SCRATCH_MNT/file1 > /dev/null
+file1_stat_after_first_access=`_stat $SCRATCH_MNT/file1`
+_compare_stat_times NNN "$file1_stat_before_first_access" \
+	"$file1_stat_after_first_access" "for file in read-only filesystem"
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/readonly/005.out b/tests/readonly/005.out
new file mode 100644
index 00000000..a5027f12
--- /dev/null
+++ b/tests/readonly/005.out
@@ -0,0 +1,2 @@
+QA output created by 005
+Silence is golden
diff --git a/tests/readonly/006 b/tests/readonly/006
new file mode 100755
index 00000000..05d2fd09
--- /dev/null
+++ b/tests/readonly/006
@@ -0,0 +1,48 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 006
+#
+# uid/gid/access rights/soft link/hard link test
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+testfile=$SCRATCH_DEV/testfile
+rm -f $testfile
+
+echo "test" >$testfile
+chown 1 $testfile
+chgrp 2 $testfile
+chmod 421 $testfile
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+testfile=$SCRATCH_MNT/testfile
+stat -c %u $testfile
+stat -c %g $testfile
+stat -c %a $testfile
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/006.out b/tests/readonly/006.out
new file mode 100644
index 00000000..9f773e99
--- /dev/null
+++ b/tests/readonly/006.out
@@ -0,0 +1,4 @@
+QA output created by 006
+1
+2
+421
diff --git a/tests/readonly/007 b/tests/readonly/007
new file mode 100755
index 00000000..811b44c6
--- /dev/null
+++ b/tests/readonly/007
@@ -0,0 +1,74 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2016 CTERA Networks. All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 007. Modifed from generic/401.
+#
+# Test filetype feature
+#
+# This test does NOT require that file system support the d_type feature.
+# It verifies that file types are reported as either DT_UNKNOWN or as
+# the actual file type. For example, special dir entries . and .. MAY be
+# reported as DT_UNKNOWN IF filetype feature is disabled (ext4), but MAY
+# also be reported as DT_DIR in this case (xfs).
+#
+# For fs for which we know how to test the filetype feature (xfs|ext*)
+# verify getting DT_UNKNOWN IFF feature is disabled.
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -rf $SCRATCH_DEV/find-by-type
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_test_program "t_dir_type"
+
+# Create our test files.
+testdir=$SCRATCH_DEV/find-by-type
+mkdir -p $testdir
+mkdir $testdir/d
+touch $testdir/f
+ln -s $testdir/f $testdir/l
+mknod $testdir/c c 1 1
+mknod $testdir/b b 1 1
+mknod $testdir/p p
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+testdir=$SCRATCH_MNT/find-by-type
+
+# Test d_type of test files - it must be the actual file type on fs
+# with filetype support and it could be either the actual file type
+# or DT_UNKNOWN on fs without filetype support
+ftype=
+src/t_dir_type $SCRATCH_MNT u | wc -l > /dev/null && ftype=1
+src/t_dir_type $testdir | \
+while read name type; do
+	if [ "$ftype" != 1 -a "$type" = u ]; then
+		if [ "$name" = "." -o "$name" = ".." ]; then
+			type=d
+		else
+			type=$name
+		fi
+	fi
+	echo $name $type
+done | sort
+
+status=0
+exit
diff --git a/tests/readonly/007.out b/tests/readonly/007.out
new file mode 100644
index 00000000..798401ed
--- /dev/null
+++ b/tests/readonly/007.out
@@ -0,0 +1,9 @@
+QA output created by 007
+. d
+.. d
+b b
+c c
+d d
+f f
+l l
+p p
diff --git a/tests/readonly/008 b/tests/readonly/008
new file mode 100755
index 00000000..09da3215
--- /dev/null
+++ b/tests/readonly/008
@@ -0,0 +1,193 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2018 Red Hat Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test NO. 008. Modifed from generic/478.
+#
+# Test OFD lock. fcntl F_OFD_SETLK to set lock, then F_OFD_GETLK
+# to verify we are being given correct advice by kernel.
+#
+# OFD lock combines POSIX lock and BSD flock:
+#   + does not share between threads
+#   + byte granularity
+#            (both tested by LTP/fcntl3{4,6})
+#   + only release automatically after all open fd closed
+#
+# This test target the third one and expand a little bit.
+#
+# The basic idea is one setlk routine setting locks via fcntl
+# *_SETLK, followed by operations like clone, dup then close fd;
+# another routine getlk getting locks via fcntl *_GETLK.
+#
+# Firstly in setlk routine process P0, place a lock L0 on an
+# opened testfile, then
+#
+#   + clone() a child P1 to close the fd then tell getlk to go,
+#     parent P0 wait getlk done then close fd.
+# or
+#   + dup() fd to a newfd then close newfd then tell getlk to go,
+#     then wait getlk done then close fd.
+#
+# In getlk process P2, do fcntl *_GETLK with lock L1 after get
+# notified by setlk routine.
+#
+# In the end, getlk routine check the returned struct flock.l_type
+# to see if the lock mechanism works fine.
+#
+# When testing with clone,
+#    + CLONE_FILES set, close releases all locks;
+#    + CLONE_FILES not set, locks remain in P0;
+#
+# If L0 is a POSIX lock,
+#   + it is not inherited into P1
+#   + it is released after dup & close
+#
+# If L0 is a OFD lock,
+#   + it is inherited into P1
+#   + it is not released after dup & close
+#
+#  setlk routine:			 * getlk routine:
+#    start				 *   start
+#      |				 *     |
+#   open file				 *  open file
+#      |				 *     |
+#   init sem				 *     |
+#      |				 *     |
+#  wait init sem done			 * wait init sem done
+#      |				 *     |
+#    setlk L0                            *     |
+#      |				 *     |
+#      |---------clone()--------|	 *     |
+#      |                        |	 *     |
+#      |(child P1)   (parent P0)|	 *     | (P2)
+#      |                        |	 *     |
+#      |                   close fd	 *     |
+#      |                        |	 *     |
+#      |                 set sem0=0	 *  wait sem0==0
+#      |                        |	 *     |
+#      |                        |	 *   getlk L1
+#      |                        |	 *     |
+#   wait sem1==0                |    	 *  set sem1=0
+#      |                        |	 *     |
+#     exit                wait child 	 *     |
+#                               |	 *  check result
+#                           cleanup  	 *     |
+#                               |	 *     |
+#                             exit	 *    exit
+#
+# We can test combainations of:
+#	+ shared or exclusive lock
+#	+ these locks are conflicting or not
+#	+ one OFD lock and one POSIX lock
+#	+ that open testfile RDONLY or RDWR
+#	+ clone with CLONE_FILES or not
+#	+ dup and close newfd
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+}
+
+# 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 generic
+_supported_os Linux
+_require_scratch
+
+rm -f $SCRATCH_DEV/testfile
+
+# prepare a 4k testfile in TEST_DIR
+$XFS_IO_PROG -f -c "pwrite -S 0xFF 0 4096" \
+	$SCRATCH_DEV/testfile >> $seqres.full 2>&1
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+do_test()
+{
+	local soptions="$1"
+	local goptions="$2"
+	# print options and getlk output for debug
+	echo $* >> $seqres.full 2>&1
+	# -s : do setlk
+	$here/src/t_ofd_locks $soptions $SCRATCH_MNT/testfile &
+	# -g : do getlk
+	$here/src/t_ofd_locks $goptions $SCRATCH_MNT/testfile | \
+		tee -a $seqres.full
+	wait $!
+
+	# add -F to clone with CLONE_FILES
+	soptions="$1 -F"
+	# with -F, new locks are always file to place
+	$here/src/t_ofd_locks $soptions $SCRATCH_MNT/testfile &
+	$here/src/t_ofd_locks $goptions $SCRATCH_MNT/testfile | \
+		tee -a $seqres.full
+	wait $!
+
+	# add -d to dup and close
+	soptions="$1 -d"
+	$here/src/t_ofd_locks $soptions $SCRATCH_MNT/testfile &
+	$here/src/t_ofd_locks $goptions $SCRATCH_MNT/testfile | \
+		tee -a $seqres.full
+	wait $!
+}
+
+# Always setlk at range [0,9], getlk at range [0,9] [5,24] or [20,29].
+# To open file RDONLY should not break the locks.
+# POSIX locks should be released after closed fd, so it wont conflict
+# with other locks in tests
+
+# -P : operate posix lock
+# -w : operate on F_WRLCK
+# -r : operate on F_RDLCK
+# -R : open file RDONLY
+# -W : open file RDWR
+# -o : file offset where the lock starts
+# -l : lock length
+# -F : clone with CLONE_FILES in setlk
+# -d : dup and close in setlk
+
+# setlk rdlck [0,9], getlk wrlck [0,9], open RDONLY
+do_test "-s -r -o 0 -l 10 -R" "-g -w -o 0 -l 10 -R" "rdlck" "unlck" "rdlck"
+# setlk rdlck [0,9], getlk wrlck [5,24], open RDONLY
+do_test "-s -r -o 0 -l 10 -R" "-g -w -o 5 -l 20 -R -P" "rdlck" "unlck" "rdlck"
+# setlk posix rdlck [0,9], getlk wrlck [5,24], open RDONLY
+do_test "-s -r -o 0 -l 10 -R -P" "-g -w -o 5 -l 20 -R" "rdlck" "unlck" "unlck"
+# setlk rdlck [0,9], getlk wrlck [20,29], open RDONLY
+do_test "-s -r -o 0 -l 10 -R" "-g -w -o 20 -l 10 -R" "unlck" "unlck" "unlck"
+# setlk posix rdlck [0,9], getlk wrlck [20,29], open RDONLY
+do_test "-s -r -o 0 -l 10 -R -P" "-g -w -o 20 -l 10 -R" "unlck" "unlck" "unlck"
+
+# setlk rdlck [0,9], getlk rdlck [0,9], open RDONLY
+do_test "-s -r -o 0 -l 10 -R" "-g -r -o 0 -l 10 -R" "unlck" "unlck" "unlck"
+# setlk rdlck [0,9], getlk posix rdlck [0,9], open RDONLY
+do_test "-s -r -o 0 -l 10 -R" "-g -r -o 0 -l 10 -R -P" "unlck" "unlck" "unlck"
+# setlk posix rdlck [0,9], getlk rdlck [0,9], open RDONLY
+do_test "-s -r -o 0 -l 10 -R -P" "-g -r -o 0 -l 10 -R" "unlck" "unlck" "unlck"
+
+# setlk rdlck [0,9], getlk rdlck [20,29], open RDONLY
+do_test "-s -r -o 0 -l 10 -R" "-g -r -o 20 -l 10 -R" "unlck" "unlck" "unlck"
+# setlk rdlck [0,9], getlk posix rdlck [20,29], open RDONLY
+do_test "-s -r -o 0 -l 10 -R" "-g -r -o 20 -l 10 -R -P" "unlck" "unlck" "unlck"
+# setlk posix rdlck [0,9], getlk rdlck [20,29], open RDONLY
+do_test "-s -r -o 0 -l 10 -R -P" "-g -r -o 20 -l 10 -R" "unlck" "unlck" "unlck"
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/008.out b/tests/readonly/008.out
new file mode 100644
index 00000000..d3ac560f
--- /dev/null
+++ b/tests/readonly/008.out
@@ -0,0 +1,34 @@
+QA output created by 008
+get rdlck
+lock could be placed
+get rdlck
+get rdlck
+lock could be placed
+get rdlck
+get rdlck
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
+lock could be placed
diff --git a/tests/readonly/009 b/tests/readonly/009
new file mode 100755
index 00000000..215fd136
--- /dev/null
+++ b/tests/readonly/009
@@ -0,0 +1,50 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2018 RedHat Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test NO. 009. Modifed from generic/504.
+#
+# flock test(shared lock, exclusive lock)
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/flock_testfile_$seq
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_command "$FLOCK_PROG" "flock"
+
+testfile=$SCRATCH_DEV/flock_testfile_$seq
+rm -f $testfile
+touch $testfile
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+testfile=$SCRATCH_MNT/flock_testfile_$seq
+
+# test shared lock
+flock -sn $testfile -c "echo 'test' > /dev/null"
+
+# test exclusive lockflock
+flock -xn $testfile -c "echo 'test' > /dev/null"
+
+# success, all done
+status=0
+echo "Silence is golden"
+exit
diff --git a/tests/readonly/009.out b/tests/readonly/009.out
new file mode 100644
index 00000000..7e977155
--- /dev/null
+++ b/tests/readonly/009.out
@@ -0,0 +1,2 @@
+QA output created by 009
+Silence is golden
diff --git a/tests/readonly/010 b/tests/readonly/010
new file mode 100755
index 00000000..9821cec0
--- /dev/null
+++ b/tests/readonly/010
@@ -0,0 +1,49 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 010
+#
+# soft link/hard link test
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+	rm -f $SCRATCH_DEV/hardlink
+	rm -f $SCRATCH_DEV/softlink
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+testfile=$SCRATCH_DEV/testfile
+rm -f $testfile
+
+echo "test" >$testfile
+ln -s $testfile $SCRATCH_DEV/softlink
+ln $testfile $SCRATCH_DEV/hardlink
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+testfile=$SCRATCH_MNT/testfile
+cat $SCRATCH_MNT/softlink
+cat $SCRATCH_MNT/hardlink
+stat -c %h $testfile
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/010.out b/tests/readonly/010.out
new file mode 100644
index 00000000..c40989d5
--- /dev/null
+++ b/tests/readonly/010.out
@@ -0,0 +1,4 @@
+QA output created by 010
+test
+test
+2
diff --git a/tests/readonly/011 b/tests/readonly/011
new file mode 100755
index 00000000..186d32a9
--- /dev/null
+++ b/tests/readonly/011
@@ -0,0 +1,92 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2013 Red Hat, Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei, Inc.  All Rights Reserved.
+#
+# FS QA Test No. 011. Modifed from generic/306.
+#
+# Test Write, RW open on a RO fs
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	umount $BINDFILE
+	cd /
+	rm -rf $SCRATCH_DEV/$seq.test
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+THIS_TEST_DIR=$SCRATCH_DEV/$seq.test
+rm -rf $THIS_TEST_DIR
+mkdir $THIS_TEST_DIR || _fail "Could not create dir for test"
+
+DEVNULL=$THIS_TEST_DIR/devnull
+DEVZERO=$THIS_TEST_DIR/devzero
+SYMLINK=$THIS_TEST_DIR/symlink
+BINDFILE=$THIS_TEST_DIR/bindfile
+TARGET=$THIS_TEST_DIR/target
+
+mknod $DEVNULL c 1 3 || _fail "Could not create devnull device"
+mknod $DEVZERO c 1 5 || _fail "Could not create devzero device"
+touch $BINDFILE || _fail "Could not create bind mount file"
+touch $TARGET || _fail "Could not create symlink target"
+ln -s $TARGET $SYMLINK
+touch $THIS_TEST_DIR/testfile
+
+_scratch_mkfs  > /dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+THIS_TEST_DIR=$SCRATCH_MNT/$seq.test
+DEVNULL=$THIS_TEST_DIR/devnull
+DEVZERO=$THIS_TEST_DIR/devzero
+SYMLINK=$THIS_TEST_DIR/symlink
+BINDFILE=$THIS_TEST_DIR/bindfile
+TESTFILE=$THIS_TEST_DIR/testfile
+
+# We should be able to read & write to/from these devices even on an RO fs
+echo "== try to create new file"
+touch $THIS_TEST_DIR/this_should_fail 2>&1 | _filter_scratch
+echo "== try to do write operation to testfile"
+cp $TESTFILE $THIS_TEST_DIR/newfile 2>&1 | _filter_scratch
+truncate -s 300 $TESTFILE 2>&1 | _filter_scratch
+echo "== try to make new dir"
+mkdir -p $THIS_TEST_DIR/newdir 2>&1 | _filter_scratch
+echo "== pwrite to null device"
+$XFS_IO_PROG -c "pwrite 0 512" $DEVNULL | _filter_xfs_io
+echo "== pread from zero device"
+$XFS_IO_PROG -c "pread 0 512" $DEVZERO | _filter_xfs_io
+
+echo "== truncating write to null device"
+echo foo > $DEVNULL 2>&1 | _filter_scratch
+echo "== appending write to null device"
+echo foo >> $DEVNULL 2>&1 | _filter_scratch
+
+echo "== writing to symlink from ro fs to rw fs"
+# Various combinations of O_CREAT & O_TRUNC
+$XFS_IO_PROG -c "pwrite 0 512" $SYMLINK | _filter_xfs_io
+$XFS_IO_PROG -f -c "pwrite 0 512" $SYMLINK | _filter_xfs_io
+$XFS_IO_PROG -t -c "pwrite 0 512" $SYMLINK | _filter_xfs_io
+
+echo "== write to bind-mounted rw file on ro fs"
+mount --bind $TARGET $BINDFILE
+# with and without -f (adds O_CREAT)
+$XFS_IO_PROG -c "pwrite 0 512" $BINDFILE | _filter_xfs_io
+$XFS_IO_PROG -f -c "pwrite 0 512" $BINDFILE | _filter_xfs_io
+$XFS_IO_PROG -t -c "pwrite 0 512" $BINDFILE | _filter_xfs_io
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/011.out b/tests/readonly/011.out
new file mode 100644
index 00000000..1987f7ef
--- /dev/null
+++ b/tests/readonly/011.out
@@ -0,0 +1,30 @@
+QA output created by 011
+== try to create new file
+touch: cannot touch 'SCRATCH_MNT/011.test/this_should_fail': Read-only file system
+== try to do write operation to testfile
+cp: cannot create regular file 'SCRATCH_MNT/011.test/newfile': Read-only file system
+truncate: cannot open 'SCRATCH_MNT/011.test/testfile' for writing: Read-only file system
+== try to make new dir
+mkdir: cannot create directory 'SCRATCH_MNT/011.test/newdir': Read-only file system
+== pwrite to null device
+wrote 512/512 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+== pread from zero device
+read 512/512 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+== truncating write to null device
+== appending write to null device
+== writing to symlink from ro fs to rw fs
+wrote 512/512 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 512/512 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 512/512 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+== write to bind-mounted rw file on ro fs
+wrote 512/512 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 512/512 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 512/512 bytes at offset 0
+XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
diff --git a/tests/readonly/012 b/tests/readonly/012
new file mode 100755
index 00000000..8263d721
--- /dev/null
+++ b/tests/readonly/012
@@ -0,0 +1,56 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2012 Red Hat, Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei, Inc. All Rights Reserved.
+#
+# FS QA Test No. 012. Modifed from generic/294.
+#
+# Tests for EEXIST (not EROFS) for inode creations, if
+# we ask to create an already-existing entity on an RO filesystem
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -rf $SCRATCH_DEV/$seq.test
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+THIS_TEST_DIR=$SCRATCH_DEV/$seq.test
+
+_create_files()
+{
+	mknod $THIS_TEST_DIR/testnode c 1 3 2>&1 | _filter_mknod
+	mkdir $THIS_TEST_DIR/testdir
+	touch $THIS_TEST_DIR/testtarget
+	ln -s $THIS_TEST_DIR/testtarget $THIS_TEST_DIR/testlink 2>&1 | _filter_ln
+}
+
+rm -rf $THIS_TEST_DIR
+mkdir $THIS_TEST_DIR || _fail "Could not create dir for test"
+
+_create_files 2>&1 | _filter_scratch
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+THIS_TEST_DIR=$SCRATCH_MNT/$seq.test
+
+_create_files 2>&1 | _filter_scratch
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/012.out b/tests/readonly/012.out
new file mode 100644
index 00000000..f088f97d
--- /dev/null
+++ b/tests/readonly/012.out
@@ -0,0 +1,5 @@
+QA output created by 012
+mknod: SCRATCH_MNT/012.test/testnode: File exists
+mkdir: cannot create directory 'SCRATCH_MNT/012.test/testdir': File exists
+touch: cannot touch 'SCRATCH_MNT/012.test/testtarget': Read-only file system
+ln: creating symbolic link 'SCRATCH_MNT/012.test/testlink': File exists
diff --git a/tests/readonly/013 b/tests/readonly/013
new file mode 100755
index 00000000..701c9114
--- /dev/null
+++ b/tests/readonly/013
@@ -0,0 +1,47 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 013
+#
+# little file test
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1    # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -rf $THIS_TEST_DIR
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+iter=100
+THIS_TEST_DIR=$SCRATCH_DEV/testdir
+
+rm -rf $THIS_TEST_DIR
+mkdir -p $THIS_TEST_DIR
+
+for ((count=1;${count}<=${iter};count++)); do
+	dd if=/dev/urandom of=$THIS_TEST_DIR/file-$count bs=1K count=1K > /dev/null 2>&1
+done
+
+_scratch_mkfs  >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+diff -r $THIS_TEST_DIR $SCRATCH_MNT/testdir
+
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/readonly/013.out b/tests/readonly/013.out
new file mode 100644
index 00000000..3e66423b
--- /dev/null
+++ b/tests/readonly/013.out
@@ -0,0 +1,2 @@
+QA output created by 013
+Silence is golden
diff --git a/tests/readonly/014 b/tests/readonly/014
new file mode 100755
index 00000000..e0e6f051
--- /dev/null
+++ b/tests/readonly/014
@@ -0,0 +1,46 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2006 Silicon Graphics, Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei, Inc.  All Rights Reserved.
+#
+# FSQA Test No. 014. Modifed from generic/141.
+#
+# Test for xfs_io mmap read problem
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1    # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/mmap
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+# create file
+file=$SCRATCH_DEV/mmap
+rm -f $file
+$XFS_IO_PROG -f -c "pwrite 0 1024k" $file > /dev/null
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+file=$SCRATCH_MNT/mmap
+
+# mmap a region and mmap read it
+$XFS_IO_PROG -r -c "mmap -r 64k 64k" -c "mread -r" $file > /dev/null
+
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/readonly/014.out b/tests/readonly/014.out
new file mode 100644
index 00000000..db5250b9
--- /dev/null
+++ b/tests/readonly/014.out
@@ -0,0 +1,2 @@
+QA output created by 014
+Silence is golden
diff --git a/tests/readonly/015 b/tests/readonly/015
new file mode 100755
index 00000000..1b4885d3
--- /dev/null
+++ b/tests/readonly/015
@@ -0,0 +1,42 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2009 Eric Sandeen.  All Rights Reserved.
+# Copyright (c) 2019 Huawei, Inc.  All Rights Reserved.
+#
+# FS QA Test No. 015. Modifed from generic/210.
+#
+# Run aio-subblock-eof-read - test AIO read of last block of file
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/aio-test-file
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+file=$SCRATCH_DEV/aio-test-file
+rm -f $file
+truncate -s 300 $file
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+file=$SCRATCH_MNT/aio-test-file
+src/aio-dio-regress/aio-subblock-eof-read $file 300
+
+status=0
+exit
diff --git a/tests/readonly/015.out b/tests/readonly/015.out
new file mode 100644
index 00000000..47de4ebf
--- /dev/null
+++ b/tests/readonly/015.out
@@ -0,0 +1,2 @@
+QA output created by 015
+AIO read of last block in file succeeded.
diff --git a/tests/readonly/016 b/tests/readonly/016
new file mode 100755
index 00000000..c7d44fd3
--- /dev/null
+++ b/tests/readonly/016
@@ -0,0 +1,145 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2017 Red Hat, Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 016. Modifed from generic/450.
+#
+# Test read around EOF. If the file offset is at or past the end of file,
+# no bytes are read, and read() returns zero.
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile_${seq}
+}
+
+# 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 generic
+_supported_os Linux
+_require_scratch
+
+tfile=$SCRATCH_DEV/testfile_${seq}
+rm -f $tfile
+
+# ssize: sector size
+# bsize: block size
+ssize=512
+bsize=4096
+asize=$((bsize * 2))
+tsize=$((asize - ssize * 2))
+
+$XFS_IO_PROG -ft -c "pwrite 0 ${tsize}" -c "fsync" $tfile >>$seqres.full
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+tfile=$SCRATCH_MNT/testfile_${seq}
+
+# check xfs_io pread result, especially for
+# Param1: expected pread offset
+# Param2: expected pread count
+# Param3: expected pread return
+#
+# If any of above values are not as expected, the output keeps
+# using the real value
+check_xfs_io_read()
+{
+	OFFSET=$1
+	COUNT=$2
+	RETURN=$3
+
+	$AWK_PROG -v ret="$RETURN" -v cnt="$COUNT" -v off="$OFFSET" '
+		/read/{
+			split($2, bytes, "/")
+
+			retval=bytes[1]
+			count=bytes[2]
+			offset=$NF
+
+			if(retval != ret || count != cnt || offset != off)
+				printf("expect [%s,%s,%s], got [%s,%s,%s]\n", \
+					off, cnt, ret, offset, count, retval)
+
+			next
+		}
+	'
+}
+
+# +-------------------------------------------------------+
+# |           block           |           block           |
+# +-------------------------------------------------------+
+# | sect | sect | sect | sect | sect | sect | sect | sect |
+#                                           |
+#                                          EOF
+# |<--------------- move EOF -------------->| xxxxxxxxxxx |
+# [pread1]
+#                             [           pread2          ]
+#                                           [pread3]
+#                                                  [pread4]  ...  [pread5]
+#
+# Run below steps with different $operation and $openflag
+#
+# 1) write 2 blocks (6 sectors) data to move EOF to the penultimate sector
+# 2) read (pread1) the first sector within EOF
+# 3) read (pread2) the second block contain EOF
+# 4) read (pread3) a sector at (after) EOF
+# 5) read (pread4) the last sector past EOF
+# 6) read (pread5) at far away from EOF
+#
+read_test()
+{
+	local of="$1"
+	local op="buffer read"
+
+	if [ "$of" != "" ]; then
+		op="direct read"
+	fi
+
+	echo "$op the first sector within EOF"
+	$XFS_IO_PROG $of -r -c "pread 0 $ssize" $tfile | \
+		check_xfs_io_read 0 "$ssize" "$ssize"
+
+	echo "$op the second block contains EOF"
+	$XFS_IO_PROG $of -r -c "pread $bsize $bsize" $tfile | \
+		check_xfs_io_read "$bsize" "$bsize" "$((tsize - bsize))"
+
+	echo "$op a sector at (after) EOF"
+	$XFS_IO_PROG $of -r -c "pread $tsize $ssize" $tfile | \
+		check_xfs_io_read "$tsize" "$ssize" "0"
+
+	echo "$op the last sector past EOF"
+	$XFS_IO_PROG $of -r -c "pread $((tsize + ssize)) $ssize" $tfile | \
+		check_xfs_io_read "$((tsize + ssize))" "$ssize" "0"
+
+	echo "$op at far away from EOF"
+	$XFS_IO_PROG $of -r -c "pread $((bsize * 100)) $ssize" $tfile | \
+		check_xfs_io_read "$((bsize * 100))" "$ssize" "0"
+}
+
+# Test buffer I/O read
+read_test
+
+# Test direct I/O read(not support)
+rm -f $seqres.full
+echo "direct read the first sector within EOF"
+$XFS_IO_PROG -d -r -c "pread $tsize $ssize" $tfile >>$seqres.full 2>&1
+cat $seqres.full | _filter_scratch
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/016.out b/tests/readonly/016.out
new file mode 100644
index 00000000..57eecd9c
--- /dev/null
+++ b/tests/readonly/016.out
@@ -0,0 +1,8 @@
+QA output created by 016
+buffer read the first sector within EOF
+buffer read the second block contains EOF
+buffer read a sector at (after) EOF
+buffer read the last sector past EOF
+buffer read at far away from EOF
+direct read the first sector within EOF
+SCRATCH_MNT/testfile_016: Invalid argument
diff --git a/tests/readonly/017 b/tests/readonly/017
new file mode 100755
index 00000000..f5ac2b92
--- /dev/null
+++ b/tests/readonly/017
@@ -0,0 +1,107 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2013 Huawei. All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 017. Modifed from generic/310.
+#
+# Check if there are two threads,one keeps calling read() or lseek(), and
+# the other calling readdir(), both on the same directory fd.
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -rf $SCRATCH_DEV/$seq
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_command "$KILLALL_PROG" killall
+
+dmesg -c > /dev/null
+
+nr_bug=`dmesg | grep -c "kernel BUG"`
+nr_error=`dmesg | grep -c "error"`
+nr_null=`dmesg | grep -c "kernel NULL pointer dereference"`
+nr_warning=`dmesg | grep -c "^WARNING"`
+nr_lockdep=`dmesg | grep -c "possible recursive locking detected"`
+
+#check if some kind of kernel bug happened
+check_kernel_bug()
+{
+	new_bug=`dmesg | grep -c "kernel BUG"`
+	new_error=`dmesg | grep -c "error"`
+	new_null=`dmesg | grep -c "kernel NULL pointer dereference"`
+	new_warning=`dmesg | grep -c "^WARNING"`
+	new_lockdep=`dmesg | grep -c "possible recursive locking detected"`
+
+	# no kernel bug is detected
+	if [ $new_bug -eq $nr_bug -a $new_error -eq $nr_error -a \
+	     $new_null -eq $nr_null -a $new_warning -eq $nr_warning -a \
+	     $new_lockdep -eq $nr_lockdep ]; then
+		return 0
+	fi
+
+	nr_bug=$new_bug
+	nr_error=$new_error
+	nr_null=$new_null
+	nr_warning=$new_warning
+	nr_lockdep=$new_lockdep
+	return 1
+}
+
+RUN_TIME=$((30 * $TIME_FACTOR))
+
+SEQ_DIR=$SCRATCH_DEV/$seq
+rm -rf $SEQ_DIR
+mkdir -p $SEQ_DIR
+for n in {1..4096}; do
+	touch $SEQ_DIR/$n
+done
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+SEQ_DIR=$SCRATCH_MNT/$seq
+
+_test_read()
+{
+	src/t_readdir_1 $SEQ_DIR &
+	sleep $RUN_TIME
+	$KILLALL_PROG t_readdir_1
+	check_kernel_bug
+	if [ $? -ne 0 ]; then
+		_fatal "kernel bug detected, check dmesg for more information."
+	fi
+}
+
+_test_lseek()
+{
+	src/t_readdir_2 $SEQ_DIR &
+	sleep $RUN_TIME
+	$KILLALL_PROG t_readdir_2
+	check_kernel_bug
+	if [ $? -ne 0 ]; then
+		_fatal "kernel bug detected, check dmesg for more information."
+	fi
+}
+
+_test_read
+_test_lseek
+
+# success, all done
+echo "Silence is golden"
+status=0
+exit
diff --git a/tests/readonly/017.out b/tests/readonly/017.out
new file mode 100644
index 00000000..82228448
--- /dev/null
+++ b/tests/readonly/017.out
@@ -0,0 +1,2 @@
+QA output created by 017
+Silence is golden
diff --git a/tests/readonly/018 b/tests/readonly/018
new file mode 100755
index 00000000..40bee5e8
--- /dev/null
+++ b/tests/readonly/018
@@ -0,0 +1,49 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2017 Intel Corporation.  All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test NO. 018. Modifed from generic/452.
+#
+# This is a regression test for kernel patch:(ls test)
+#   commit 42d4a99b09cb ("ext4: fix fault handling when mounted with -o dax,ro")
+# created by Ross Zwisler <ross.zwisler@linux.intel.com>
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/ls_on_scratch
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+# we need to be able to execute binaries on scratch
+_exclude_scratch_mount_option "noexec"
+
+LS=$(which ls --skip-alias --skip-functions)
+SCRATCH_LS=$SCRATCH_DEV/ls_on_scratch
+cp $LS $SCRATCH_LS
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+SCRATCH_LS=$SCRATCH_MNT/ls_on_scratch
+
+$SCRATCH_LS $SCRATCH_LS | _filter_scratch
+
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/018.out b/tests/readonly/018.out
new file mode 100644
index 00000000..f608c03d
--- /dev/null
+++ b/tests/readonly/018.out
@@ -0,0 +1,2 @@
+QA output created by 018
+SCRATCH_MNT/ls_on_scratch
diff --git a/tests/readonly/019 b/tests/readonly/019
new file mode 100755
index 00000000..69c6c7fd
--- /dev/null
+++ b/tests/readonly/019
@@ -0,0 +1,109 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
+# Copyright (c) 2017 Google, Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 019. Modifed from generic/097.
+#
+# simple attr tests for EAs:
+#  - set should return error
+#  - get
+#  - list
+# Basic testing.
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/fooA
+	rm -f $SCRATCH_DEV/fooB
+	rm -f $SCRATCH_DEV/fooC
+}
+
+getfattr()
+{
+	_getfattr --absolute-names "$@" |& _filter_scratch
+}
+
+setfattr()
+{
+	$SETFATTR_PROG "$@" |& _filter_scratch
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/attr
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+
+_require_scratch
+_require_attrs
+
+file0=$SCRATCH_DEV/foo0
+fileA=$SCRATCH_DEV/fooA
+fileB=$SCRATCH_DEV/fooB
+fileC=$SCRATCH_DEV/fooC
+
+rm -f $file0
+rm -f $fileA
+rm -f $fileB
+rm -f $fileC
+echo -e "\ncreate file fooA"
+touch $fileA
+
+echo -e "\ncreate file fooB"
+touch $fileB
+echo -e "\nset fooB EA <user.noise,woof>:"
+setfattr -n user.noise -v woof $fileB
+
+echo -e "\ncreate file fooC"
+touch $fileC
+echo -e "\nset fooC EA <user.size,small>:"
+setfattr -n user.size -v small $fileC
+echo -e "\nset fooC EA <user.noise,low>:"
+setfattr -n user.noise -v low $fileC
+echo -e "\nset fooC EA <trusted.colour,blue>:"
+setfattr -n trusted.colour -v blue $fileC
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+file0=$SCRATCH_MNT/foo0
+fileA=$SCRATCH_MNT/fooA
+fileB=$SCRATCH_MNT/fooB
+fileC=$SCRATCH_MNT/fooC
+
+echo -e "\nset SCRATCH_MNT fooA EA"
+setfattr -n user.noise -v woof $fileA
+
+echo -e "\nlist non-existent file0 EA"
+getfattr -d $file0
+
+echo -e "\nshould be no EAs for fooA:"
+getfattr -d $fileA
+
+echo -e "\nlist the EAs for fooB: user.noise"
+getfattr -d $fileB
+
+echo -e "\nlist the EAs for fooC: user.size, user.noise"
+getfattr -d $fileC
+
+echo -e "\nget the value of the fooC user.size EA"
+getfattr -n user.size $fileC
+
+echo -e "\nlist fooC trusted EAs"
+getfattr -d -m '^trusted\.' $fileC
+
+echo -e "success"
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/019.out b/tests/readonly/019.out
new file mode 100644
index 00000000..48593890
--- /dev/null
+++ b/tests/readonly/019.out
@@ -0,0 +1,45 @@
+QA output created by 019
+
+create file fooA
+
+create file fooB
+
+set fooB EA <user.noise,woof>:
+
+create file fooC
+
+set fooC EA <user.size,small>:
+
+set fooC EA <user.noise,low>:
+
+set fooC EA <trusted.colour,blue>:
+
+set SCRATCH_MNT fooA EA
+setfattr: SCRATCH_MNT/fooA: Read-only file system
+
+list non-existent file0 EA
+getfattr: SCRATCH_MNT/foo0: No such file or directory
+
+should be no EAs for fooA:
+
+list the EAs for fooB: user.noise
+# file: SCRATCH_MNT/fooB
+user.noise="woof"
+
+
+list the EAs for fooC: user.size, user.noise
+# file: SCRATCH_MNT/fooC
+user.noise="low"
+user.size="small"
+
+
+get the value of the fooC user.size EA
+# file: SCRATCH_MNT/fooC
+user.size="small"
+
+
+list fooC trusted EAs
+# file: SCRATCH_MNT/fooC
+trusted.colour="blue"
+
+success
diff --git a/tests/readonly/020 b/tests/readonly/020
new file mode 100755
index 00000000..c56c4d3f
--- /dev/null
+++ b/tests/readonly/020
@@ -0,0 +1,56 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2016 SUSE Linux Products GmbH. All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 020. Modifed from generic/337.
+#
+# Test that the filesystem's implementation of the listxattrs system call lists
+# all the xattrs an inode has.
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/attr
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_attrs
+
+rm -f $SCRATCH_DEV/testfile
+touch $SCRATCH_DEV/testfile
+# Create our test file with a few xattrs. The first 3 xattrs have a name that
+# when given as input to a crc32c function result in the same checksum. This
+# made btrfs list only one of the xattrs through listxattrs system call (because
+# it packs xattrs with the same name checksum into the same btree item).
+$SETFATTR_PROG -n user.foobar -v 123 $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.WvG1c1Td -v qwerty $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.J3__T_Km3dVsW_ -v hello $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.something -v pizza $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.ping -v pong $SCRATCH_DEV/testfile
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+# Now call getfattr with --dump, which calls the listxattrs system call.
+# It should list all the xattrs we have set before.
+_getfattr --absolute-names --dump $SCRATCH_MNT/testfile | _filter_scratch
+
+echo -e "success"
+# success, all done
+status=0
+exit
diff --git a/tests/readonly/020.out b/tests/readonly/020.out
new file mode 100644
index 00000000..27ca52a9
--- /dev/null
+++ b/tests/readonly/020.out
@@ -0,0 +1,9 @@
+QA output created by 020
+# file: SCRATCH_MNT/testfile
+user.J3__T_Km3dVsW_="hello"
+user.WvG1c1Td="qwerty"
+user.foobar="123"
+user.ping="pong"
+user.something="pizza"
+
+success
diff --git a/tests/readonly/021 b/tests/readonly/021
new file mode 100755
index 00000000..9d46c8e5
--- /dev/null
+++ b/tests/readonly/021
@@ -0,0 +1,74 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2016 Red Hat, Inc.  All Rights Reserved.
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 021. Modifed from generic/377.
+#
+# Test listxattr syscall behaviour with different buffer sizes.
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/attr
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_attrs
+_require_test_program "listxattr"
+
+listxattr="$here/src/listxattr"
+
+# Create a testfile with three xattrs such that the sum of namelengths of the
+# first two is bigger than the namelength of the third. This is needed for
+# the 5th testcase that tests one of the cornercases.
+testfile=$SCRATCH_DEV/testfile
+rm -f $testfile
+touch $testfile
+$SETFATTR_PROG -n user.foo -v bar $testfile
+$SETFATTR_PROG -n user.ping -v pong $testfile
+$SETFATTR_PROG -n user.hello -v there $testfile
+
+_scratch_mkfs >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+
+testfile=$SCRATCH_MNT/testfile
+
+# 1. Call listxattr without buffer length argument. This should succeed.
+$listxattr $testfile | sort
+
+# 2. Calling listxattr on nonexistant file should fail with -ENOENT.
+$listxattr ""
+
+# 3. Calling listxattr with buffersize not suffecient for even one xattr
+# should fail with -ERANGE.
+$listxattr $testfile 1
+
+# 4. Calling listxattr with buffersize suffecient for one xattr, but not
+# sufficient for the whole list should still fail with -ERANGE.
+$listxattr $testfile 9
+
+# 5. Calling listxattr with buffersize suffecient for the last xattr, but not
+# sufficient for the sum of first two. Should fail with -ERANGE.
+$listxattr $testfile 11
+
+# 6. Calling listxattr with buffersize bigger than needed should succeed.
+$listxattr $testfile 500 | sort
+
+status=0
+exit
diff --git a/tests/readonly/021.out b/tests/readonly/021.out
new file mode 100644
index 00000000..09b2c5ea
--- /dev/null
+++ b/tests/readonly/021.out
@@ -0,0 +1,11 @@
+QA output created by 021
+xattr: user.foo
+xattr: user.hello
+xattr: user.ping
+listxattr: No such file or directory
+listxattr: Numerical result out of range
+listxattr: Numerical result out of range
+listxattr: Numerical result out of range
+xattr: user.foo
+xattr: user.hello
+xattr: user.ping
diff --git a/tests/readonly/Makefile b/tests/readonly/Makefile
new file mode 100644
index 00000000..b9a2b641
--- /dev/null
+++ b/tests/readonly/Makefile
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2019 Huawei.  All Rights Reserved.
+#
+
+TOPDIR = ../..
+include $(TOPDIR)/include/builddefs
+
+READONLY_DIR = readonly
+TARGET_DIR = $(PKG_LIB_DIR)/$(TESTS_DIR)/$(READONLY_DIR)
+
+include $(BUILDRULES)
+
+install:
+	$(INSTALL) -m 755 -d $(TARGET_DIR)
+	$(INSTALL) -m 755 $(TESTS) $(TARGET_DIR)
+	$(INSTALL) -m 644 group $(TARGET_DIR)
+	$(INSTALL) -m 644 $(OUTFILES) $(TARGET_DIR)
+
+# Nothing.
+install-dev install-lib:
diff --git a/tests/readonly/group b/tests/readonly/group
new file mode 100644
index 00000000..3953328d
--- /dev/null
+++ b/tests/readonly/group
@@ -0,0 +1,26 @@
+# QA groups control file
+# Defines test groups and nominal group owners
+# - do not start group names with a digit
+# - comment line before each group is "new" description
+#
+001 auto
+002 auto
+003 auto
+004 auto
+005 auto
+006 auto
+007 auto
+008 auto
+009 auto
+010 auto
+011 auto
+012 auto
+013 auto
+014 auto
+015 auto
+016 auto
+017 auto
+018 auto
+019 auto
+020 auto
+021 auto
diff --git a/tests/squashfs/001 b/tests/squashfs/001
new file mode 100755
index 00000000..3f71f122
--- /dev/null
+++ b/tests/squashfs/001
@@ -0,0 +1,60 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 001
+#
+# Compression test
+#
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1    # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -rf $THIS_TEST_DIR
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+# rarely use lzma, do not test it
+mcomp=(gzip lz4 lzo xz)
+iter=5
+THIS_TEST_DIR=$SCRATCH_DEV/testdir
+
+rm -rf $THIS_TEST_DIR
+mkdir -p $THIS_TEST_DIR
+
+for ((count=1;${count}<=${iter};count++)); do
+	dd if=/dev/urandom of=$THIS_TEST_DIR/file-$count bs=1K count=1024 > /dev/null 2>&1
+	mkdir -p $THIS_TEST_DIR/dir-$count
+	dd if=/dev/urandom of=$THIS_TEST_DIR/dir-$count/file-$count bs=1K count=1024 > /dev/null 2>&1
+done
+
+# Run tests
+for comp in ${mcomp[*]}; do
+	echo "making squashfs image using $comp compression."
+	_scratch_mkfs "-comp $comp" >/dev/null 2>&1
+	if [ $?  != 0 ]; then
+		echo "mksquashfs failed for $comp compression."
+		continue
+	fi
+	echo "Testing mount and diff data."
+	_scratch_mount
+	diff -r $THIS_TEST_DIR $SCRATCH_MNT/testdir
+	_scratch_unmount
+done
+
+status=0
+exit
diff --git a/tests/squashfs/001.out b/tests/squashfs/001.out
new file mode 100644
index 00000000..93cafe6a
--- /dev/null
+++ b/tests/squashfs/001.out
@@ -0,0 +1,9 @@
+QA output created by 001
+making squashfs image using gzip compression.
+Testing mount and diff data.
+making squashfs image using lz4 compression.
+Testing mount and diff data.
+making squashfs image using lzo compression.
+Testing mount and diff data.
+making squashfs image using xz compression.
+Testing mount and diff data.
diff --git a/tests/squashfs/002 b/tests/squashfs/002
new file mode 100755
index 00000000..ae999a38
--- /dev/null
+++ b/tests/squashfs/002
@@ -0,0 +1,40 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 002
+#
+# mksquashfs -no-sparse test, -no-sparse: read all data of sparse files
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1    # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+rm -f $SCRATCH_DEV/testfile
+truncate -s 100M $SCRATCH_DEV/testfile
+
+_scratch_mkfs "-no-sparse" >/dev/null 2>&1 || _fail "Could not mkfs scratch device"
+_scratch_mount
+# If use -no-sparse, du -h will be 100M
+du -h $SCRATCH_MNT/testfile | awk '{print $1}'
+diff -r $SCRATCH_DEV/testfile $SCRATCH_MNT/testfile
+
+status=0
+exit
diff --git a/tests/squashfs/002.out b/tests/squashfs/002.out
new file mode 100644
index 00000000..7ca3f044
--- /dev/null
+++ b/tests/squashfs/002.out
@@ -0,0 +1,2 @@
+QA output created by 002
+100M
diff --git a/tests/squashfs/003 b/tests/squashfs/003
new file mode 100755
index 00000000..4c2ea806
--- /dev/null
+++ b/tests/squashfs/003
@@ -0,0 +1,55 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 003
+#
+# mksquashfs -xattrs, -no-xattrs test
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $SCRATCH_DEV/testfile
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/attr
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+_require_attrs
+
+opts=(-xattrs -no-xattrs)
+
+rm -f $SCRATCH_DEV/testfile
+
+touch $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.foobar -v 123 $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.WvG1c1Td -v qwerty $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.J3__T_Km3dVsW_ -v hello $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.something -v pizza $SCRATCH_DEV/testfile
+$SETFATTR_PROG -n user.ping -v pong $SCRATCH_DEV/testfile
+
+# Run tests
+for opt in ${opts[*]}; do
+	echo "making squashfs image using $opt"
+	_scratch_mkfs "$opt" >/dev/null 2>&1 || _fail "Could not mkfs scratch device use $opt"
+	_scratch_mount
+	# list all the xattrs we have set before.
+	echo "list all testfile xattr"
+	_getfattr --absolute-names --dump $SCRATCH_MNT/testfile | _filter_scratch
+	_scratch_unmount
+done
+
+status=0
+exit
diff --git a/tests/squashfs/003.out b/tests/squashfs/003.out
new file mode 100644
index 00000000..c55184f8
--- /dev/null
+++ b/tests/squashfs/003.out
@@ -0,0 +1,12 @@
+QA output created by 003
+making squashfs image using -xattrs
+list all testfile xattr
+# file: SCRATCH_MNT/testfile
+user.J3__T_Km3dVsW_="hello"
+user.WvG1c1Td="qwerty"
+user.foobar="123"
+user.ping="pong"
+user.something="pizza"
+
+making squashfs image using -no-xattrs
+list all testfile xattr
diff --git a/tests/squashfs/004 b/tests/squashfs/004
new file mode 100755
index 00000000..bd34b661
--- /dev/null
+++ b/tests/squashfs/004
@@ -0,0 +1,73 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 004
+#
+# mksquashfs -no-fragments -always-use-fragments, -noI -noD -noF -noX, -b test
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1    # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -rf $THIS_TEST_DIR
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+mfrag=(-no-fragments -always-use-fragments)
+mcomp=(-noI -noD -noF -noX)
+iter=6
+THIS_TEST_DIR=$SCRATCH_DEV/testdir
+
+rm -rf $THIS_TEST_DIR
+mkdir -p $THIS_TEST_DIR
+
+for ((count=1;${count}<=${iter};count++)); do
+	dd if=/dev/urandom of=$THIS_TEST_DIR/file-$count bs=1M count=1 >/dev/null 2>&1
+	mkdir -p $THIS_TEST_DIR/dir-$count
+	dd if=/dev/urandom of=$THIS_TEST_DIR/dir-$count/file-$count bs=1K count=1 >/dev/null 2>&1
+done
+
+for frag in ${mfrag[*]}; do
+	for comp in ${mcomp[*]}; do
+		echo "making squashfs image using 16384 blocksize, $frag, $comp"
+		_scratch_mkfs "-b 16384 $frag $comp" >/dev/null 2>&1
+		if [ $?  != 0 ]; then
+			echo "mksquashfs failed."
+			continue
+		fi
+		echo "Testing mount and diff data."
+		_scratch_mount
+		diff -r $THIS_TEST_DIR $SCRATCH_MNT/testdir
+		_scratch_unmount
+	done
+done
+
+for blocksize in 4096 8192 32768; do
+	echo "making squashfs image using $blocksize blocksize"
+	_scratch_mkfs "-b $blocksize" >/dev/null 2>&1
+	if [ $?  != 0 ]; then
+		echo "mksquashfs failed."
+		continue
+	fi
+	echo "Testing mount and diff data."
+	_scratch_mount
+	diff -r $THIS_TEST_DIR $SCRATCH_MNT/testdir
+	_scratch_unmount
+done
+
+status=0
+exit
diff --git a/tests/squashfs/004.out b/tests/squashfs/004.out
new file mode 100644
index 00000000..e6b65559
--- /dev/null
+++ b/tests/squashfs/004.out
@@ -0,0 +1,23 @@
+QA output created by 004
+making squashfs image using 16384 blocksize, -no-fragments, -noI
+Testing mount and diff data.
+making squashfs image using 16384 blocksize, -no-fragments, -noD
+Testing mount and diff data.
+making squashfs image using 16384 blocksize, -no-fragments, -noF
+Testing mount and diff data.
+making squashfs image using 16384 blocksize, -no-fragments, -noX
+Testing mount and diff data.
+making squashfs image using 16384 blocksize, -always-use-fragments, -noI
+Testing mount and diff data.
+making squashfs image using 16384 blocksize, -always-use-fragments, -noD
+Testing mount and diff data.
+making squashfs image using 16384 blocksize, -always-use-fragments, -noF
+Testing mount and diff data.
+making squashfs image using 16384 blocksize, -always-use-fragments, -noX
+Testing mount and diff data.
+making squashfs image using 4096 blocksize
+Testing mount and diff data.
+making squashfs image using 8192 blocksize
+Testing mount and diff data.
+making squashfs image using 32768 blocksize
+Testing mount and diff data.
diff --git a/tests/squashfs/005 b/tests/squashfs/005
new file mode 100755
index 00000000..2935123d
--- /dev/null
+++ b/tests/squashfs/005
@@ -0,0 +1,54 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Huawei. All Rights Reserved.
+#
+# FS QA Test No. 005
+#
+# mksquashfs -all-root, -force-uid uid, -force-gid gid test
+#
+seq=`basename $0`
+echo "QA output created by $seq"
+
+status=1        # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	cd /
+	rm -f $testfile
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_scratch
+
+testfile=$SCRATCH_DEV/testfile
+rm -f $testfile
+
+echo test >$testfile
+chown 1 $testfile
+chgrp 2 $testfile
+chmod 421 $testfile
+
+for ids in "-all-root" "-force-uid 2" "-force-gid 1"; do
+	echo "making squashfs image using $ids"
+	_scratch_mkfs "$ids" >/dev/null 2>&1
+	if [ $?  != 0 ]; then
+		echo "mksquashfs failed."
+		continue
+	fi
+	echo "getting uid, gid"
+	_scratch_mount
+	stat -c %u $SCRATCH_MNT/testfile
+	stat -c %g $SCRATCH_MNT/testfile
+	_scratch_unmount
+done
+
+# success, all done
+status=0
+exit
diff --git a/tests/squashfs/005.out b/tests/squashfs/005.out
new file mode 100644
index 00000000..1ee4f9c3
--- /dev/null
+++ b/tests/squashfs/005.out
@@ -0,0 +1,13 @@
+QA output created by 005
+making squashfs image using -all-root
+getting uid, gid
+0
+0
+making squashfs image using -force-uid 2
+getting uid, gid
+2
+2
+making squashfs image using -force-gid 1
+getting uid, gid
+1
+1
diff --git a/tests/squashfs/Makefile b/tests/squashfs/Makefile
new file mode 100644
index 00000000..bbdc91ea
--- /dev/null
+++ b/tests/squashfs/Makefile
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2019 Huawei.  All Rights Reserved.
+#
+
+TOPDIR = ../..
+include $(TOPDIR)/include/builddefs
+
+SQUASHFS_DIR = squashfs
+TARGET_DIR = $(PKG_LIB_DIR)/$(TESTS_DIR)/$(SQUASHFS_DIR)
+
+include $(BUILDRULES)
+
+install:
+	$(INSTALL) -m 755 -d $(TARGET_DIR)
+	$(INSTALL) -m 755 $(TESTS) $(TARGET_DIR)
+	$(INSTALL) -m 644 group $(TARGET_DIR)
+	$(INSTALL) -m 644 $(OUTFILES) $(TARGET_DIR)
+
+# Nothing.
+install-dev install-lib:
diff --git a/tests/squashfs/group b/tests/squashfs/group
new file mode 100644
index 00000000..a3544bc1
--- /dev/null
+++ b/tests/squashfs/group
@@ -0,0 +1,10 @@
+# QA groups control file
+# Defines test groups and nominal group owners
+# - do not start group names with a digit
+# - comment line before each group is "new" description
+#
+001 auto squashfs
+002 auto squashfs
+003 auto squashfs
+004 auto squashfs
+005 auto squashfs
--
2.16.2.dirty

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/1] squashfs: introduce squashfs support
  2019-01-18  9:37 [PATCH 0/1] squashfs: introduce squashfs support zhengbin
  2019-01-18  9:37 ` [PATCH 1/1] squashfs: add squashfs tests zhengbin
@ 2019-01-18 12:43 ` Eryu Guan
  2019-01-21  1:48   ` zhengbin (A)
  2019-01-21 22:49 ` Dave Chinner
  2 siblings, 1 reply; 5+ messages in thread
From: Eryu Guan @ 2019-01-18 12:43 UTC (permalink / raw)
  To: zhengbin; +Cc: fstests, houtao1, zhaohongjiang

On Fri, Jan 18, 2019 at 05:37:24PM +0800, zhengbin wrote:
> This patch add squashfs support in xfstests-dev. Add two directories

Would you please split the patch into multiple patches? So that it's
much easier to review. e.g.

> in tests directory, readonly can also be used for other readonly
> filesystem, squashfs is just used for squashfs filesystem.

The squashfs support is one patch.

> tests/readonly/001        mount test
> tests/readonly/002--010   metadata test
> tests/readonly/011--018   data test
> tests/readonly/019--021   xattr test
> tests/squashfs/001--005   mksquashfs options test

And each test group in one patch.

Also, the 'readonly' tests should really be in in 'shared' dir with
proper '_supported_fs' statement, if they're meant to be shared with
other readonly filesystems.

Thanks,
Eryu

> 
> zhengbin (1):
>   squashfs: add squashfs tests
> 
>  .gitignore                                  |   1 +
>  README.squashfs                             |  12 ++
>  check                                       |  19 ++-
>  common/attr                                 |   5 +
>  common/config                               |   6 +
>  common/rc                                   |  63 ++++++++-
>  src/aio-dio-regress/aio-subblock-eof-read.c |  84 ++++++++++++
>  tests/readonly/001                          |  97 ++++++++++++++
>  tests/readonly/001.out                      |   2 +
>  tests/readonly/002                          |  48 +++++++
>  tests/readonly/002.out                      |   6 +
>  tests/readonly/003                          |  72 +++++++++++
>  tests/readonly/003.out                      |   5 +
>  tests/readonly/004                          |  50 +++++++
>  tests/readonly/004.out                      |   3 +
>  tests/readonly/005                          |  77 +++++++++++
>  tests/readonly/005.out                      |   2 +
>  tests/readonly/006                          |  48 +++++++
>  tests/readonly/006.out                      |   4 +
>  tests/readonly/007                          |  74 +++++++++++
>  tests/readonly/007.out                      |   9 ++
>  tests/readonly/008                          | 193 ++++++++++++++++++++++++++++
>  tests/readonly/008.out                      |  34 +++++
>  tests/readonly/009                          |  50 +++++++
>  tests/readonly/009.out                      |   2 +
>  tests/readonly/010                          |  49 +++++++
>  tests/readonly/010.out                      |   4 +
>  tests/readonly/011                          |  92 +++++++++++++
>  tests/readonly/011.out                      |  30 +++++
>  tests/readonly/012                          |  56 ++++++++
>  tests/readonly/012.out                      |   5 +
>  tests/readonly/013                          |  47 +++++++
>  tests/readonly/013.out                      |   2 +
>  tests/readonly/014                          |  46 +++++++
>  tests/readonly/014.out                      |   2 +
>  tests/readonly/015                          |  42 ++++++
>  tests/readonly/015.out                      |   2 +
>  tests/readonly/016                          | 145 +++++++++++++++++++++
>  tests/readonly/016.out                      |   8 ++
>  tests/readonly/017                          | 107 +++++++++++++++
>  tests/readonly/017.out                      |   2 +
>  tests/readonly/018                          |  49 +++++++
>  tests/readonly/018.out                      |   2 +
>  tests/readonly/019                          | 109 ++++++++++++++++
>  tests/readonly/019.out                      |  45 +++++++
>  tests/readonly/020                          |  56 ++++++++
>  tests/readonly/020.out                      |   9 ++
>  tests/readonly/021                          |  74 +++++++++++
>  tests/readonly/021.out                      |  11 ++
>  tests/readonly/Makefile                     |  20 +++
>  tests/readonly/group                        |  26 ++++
>  tests/squashfs/001                          |  60 +++++++++
>  tests/squashfs/001.out                      |   9 ++
>  tests/squashfs/002                          |  40 ++++++
>  tests/squashfs/002.out                      |   2 +
>  tests/squashfs/003                          |  55 ++++++++
>  tests/squashfs/003.out                      |  12 ++
>  tests/squashfs/004                          |  73 +++++++++++
>  tests/squashfs/004.out                      |  23 ++++
>  tests/squashfs/005                          |  54 ++++++++
>  tests/squashfs/005.out                      |  13 ++
>  tests/squashfs/Makefile                     |  20 +++
>  tests/squashfs/group                        |  10 ++
>  63 files changed, 2372 insertions(+), 5 deletions(-)
>  create mode 100644 README.squashfs
>  create mode 100644 src/aio-dio-regress/aio-subblock-eof-read.c
>  create mode 100755 tests/readonly/001
>  create mode 100644 tests/readonly/001.out
>  create mode 100755 tests/readonly/002
>  create mode 100644 tests/readonly/002.out
>  create mode 100755 tests/readonly/003
>  create mode 100644 tests/readonly/003.out
>  create mode 100755 tests/readonly/004
>  create mode 100644 tests/readonly/004.out
>  create mode 100755 tests/readonly/005
>  create mode 100644 tests/readonly/005.out
>  create mode 100755 tests/readonly/006
>  create mode 100644 tests/readonly/006.out
>  create mode 100755 tests/readonly/007
>  create mode 100644 tests/readonly/007.out
>  create mode 100755 tests/readonly/008
>  create mode 100644 tests/readonly/008.out
>  create mode 100755 tests/readonly/009
>  create mode 100644 tests/readonly/009.out
>  create mode 100755 tests/readonly/010
>  create mode 100644 tests/readonly/010.out
>  create mode 100755 tests/readonly/011
>  create mode 100644 tests/readonly/011.out
>  create mode 100755 tests/readonly/012
>  create mode 100644 tests/readonly/012.out
>  create mode 100755 tests/readonly/013
>  create mode 100644 tests/readonly/013.out
>  create mode 100755 tests/readonly/014
>  create mode 100644 tests/readonly/014.out
>  create mode 100755 tests/readonly/015
>  create mode 100644 tests/readonly/015.out
>  create mode 100755 tests/readonly/016
>  create mode 100644 tests/readonly/016.out
>  create mode 100755 tests/readonly/017
>  create mode 100644 tests/readonly/017.out
>  create mode 100755 tests/readonly/018
>  create mode 100644 tests/readonly/018.out
>  create mode 100755 tests/readonly/019
>  create mode 100644 tests/readonly/019.out
>  create mode 100755 tests/readonly/020
>  create mode 100644 tests/readonly/020.out
>  create mode 100755 tests/readonly/021
>  create mode 100644 tests/readonly/021.out
>  create mode 100644 tests/readonly/Makefile
>  create mode 100644 tests/readonly/group
>  create mode 100755 tests/squashfs/001
>  create mode 100644 tests/squashfs/001.out
>  create mode 100755 tests/squashfs/002
>  create mode 100644 tests/squashfs/002.out
>  create mode 100755 tests/squashfs/003
>  create mode 100644 tests/squashfs/003.out
>  create mode 100755 tests/squashfs/004
>  create mode 100644 tests/squashfs/004.out
>  create mode 100755 tests/squashfs/005
>  create mode 100644 tests/squashfs/005.out
>  create mode 100644 tests/squashfs/Makefile
>  create mode 100644 tests/squashfs/group
> 
> --
> 2.16.2.dirty
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/1] squashfs: introduce squashfs support
  2019-01-18 12:43 ` [PATCH 0/1] squashfs: introduce squashfs support Eryu Guan
@ 2019-01-21  1:48   ` zhengbin (A)
  0 siblings, 0 replies; 5+ messages in thread
From: zhengbin (A) @ 2019-01-21  1:48 UTC (permalink / raw)
  To: Eryu Guan; +Cc: fstests, houtao1, zhaohongjiang

> Would you please split the patch into multiple patches? So that it's
> much easier to review. e.g.
---->Copy that, I will send a v2 patch later

> Also, the 'readonly' tests should really be in in 'shared' dir with
> proper '_supported_fs' statement, if they're meant to be shared with
> other readonly filesystems.
---->My advice is that the 'readonly' tests should still be in 'readonly' dir.
The step of tests in readonly filesystem(such as squashfs) are as follows:
1. write data in $SCRATCH_DEV
2. mkfs $SCRATCH_DEV file
3. mount file $SCRATCH_MNT
4. test in $SCRATCH_MNT

While the rw filesystems are as follows:
1. mkfs $SCRATCH_DEV
2. mount $SCRATCH_DEV $SCRATCH_MNT
3. test in $SCRATCH_MNT(just write data in $SCRATCH_MNT)

The tests in generic/shared are set as rw filesystem, it is hard to use this in
readonly filesystem, So I use 'readonly' dir which can be easier to read.

This is my advice, looking forward to your reply, thanks.

PS: As readonly filesystems need to mkfs in every test, I do not use TEST_DEV & TEST_DIR

On 2019/1/18 20:43, Eryu Guan wrote:
> On Fri, Jan 18, 2019 at 05:37:24PM +0800, zhengbin wrote:
>> This patch add squashfs support in xfstests-dev. Add two directories
> 
> Would you please split the patch into multiple patches? So that it's
> much easier to review. e.g.
> 
>> in tests directory, readonly can also be used for other readonly
>> filesystem, squashfs is just used for squashfs filesystem.
> 
> The squashfs support is one patch.
> 
>> tests/readonly/001        mount test
>> tests/readonly/002--010   metadata test
>> tests/readonly/011--018   data test
>> tests/readonly/019--021   xattr test
>> tests/squashfs/001--005   mksquashfs options test
> 
> And each test group in one patch.
> 
> Also, the 'readonly' tests should really be in in 'shared' dir with
> proper '_supported_fs' statement, if they're meant to be shared with
> other readonly filesystems.
> 
> Thanks,
> Eryu
> 
>>
>> zhengbin (1):
>>   squashfs: add squashfs tests
>>
>>  .gitignore                                  |   1 +
>>  README.squashfs                             |  12 ++
>>  check                                       |  19 ++-
>>  common/attr                                 |   5 +
>>  common/config                               |   6 +
>>  common/rc                                   |  63 ++++++++-
>>  src/aio-dio-regress/aio-subblock-eof-read.c |  84 ++++++++++++
>>  tests/readonly/001                          |  97 ++++++++++++++
>>  tests/readonly/001.out                      |   2 +
>>  tests/readonly/002                          |  48 +++++++
>>  tests/readonly/002.out                      |   6 +
>>  tests/readonly/003                          |  72 +++++++++++
>>  tests/readonly/003.out                      |   5 +
>>  tests/readonly/004                          |  50 +++++++
>>  tests/readonly/004.out                      |   3 +
>>  tests/readonly/005                          |  77 +++++++++++
>>  tests/readonly/005.out                      |   2 +
>>  tests/readonly/006                          |  48 +++++++
>>  tests/readonly/006.out                      |   4 +
>>  tests/readonly/007                          |  74 +++++++++++
>>  tests/readonly/007.out                      |   9 ++
>>  tests/readonly/008                          | 193 ++++++++++++++++++++++++++++
>>  tests/readonly/008.out                      |  34 +++++
>>  tests/readonly/009                          |  50 +++++++
>>  tests/readonly/009.out                      |   2 +
>>  tests/readonly/010                          |  49 +++++++
>>  tests/readonly/010.out                      |   4 +
>>  tests/readonly/011                          |  92 +++++++++++++
>>  tests/readonly/011.out                      |  30 +++++
>>  tests/readonly/012                          |  56 ++++++++
>>  tests/readonly/012.out                      |   5 +
>>  tests/readonly/013                          |  47 +++++++
>>  tests/readonly/013.out                      |   2 +
>>  tests/readonly/014                          |  46 +++++++
>>  tests/readonly/014.out                      |   2 +
>>  tests/readonly/015                          |  42 ++++++
>>  tests/readonly/015.out                      |   2 +
>>  tests/readonly/016                          | 145 +++++++++++++++++++++
>>  tests/readonly/016.out                      |   8 ++
>>  tests/readonly/017                          | 107 +++++++++++++++
>>  tests/readonly/017.out                      |   2 +
>>  tests/readonly/018                          |  49 +++++++
>>  tests/readonly/018.out                      |   2 +
>>  tests/readonly/019                          | 109 ++++++++++++++++
>>  tests/readonly/019.out                      |  45 +++++++
>>  tests/readonly/020                          |  56 ++++++++
>>  tests/readonly/020.out                      |   9 ++
>>  tests/readonly/021                          |  74 +++++++++++
>>  tests/readonly/021.out                      |  11 ++
>>  tests/readonly/Makefile                     |  20 +++
>>  tests/readonly/group                        |  26 ++++
>>  tests/squashfs/001                          |  60 +++++++++
>>  tests/squashfs/001.out                      |   9 ++
>>  tests/squashfs/002                          |  40 ++++++
>>  tests/squashfs/002.out                      |   2 +
>>  tests/squashfs/003                          |  55 ++++++++
>>  tests/squashfs/003.out                      |  12 ++
>>  tests/squashfs/004                          |  73 +++++++++++
>>  tests/squashfs/004.out                      |  23 ++++
>>  tests/squashfs/005                          |  54 ++++++++
>>  tests/squashfs/005.out                      |  13 ++
>>  tests/squashfs/Makefile                     |  20 +++
>>  tests/squashfs/group                        |  10 ++
>>  63 files changed, 2372 insertions(+), 5 deletions(-)
>>  create mode 100644 README.squashfs
>>  create mode 100644 src/aio-dio-regress/aio-subblock-eof-read.c
>>  create mode 100755 tests/readonly/001
>>  create mode 100644 tests/readonly/001.out
>>  create mode 100755 tests/readonly/002
>>  create mode 100644 tests/readonly/002.out
>>  create mode 100755 tests/readonly/003
>>  create mode 100644 tests/readonly/003.out
>>  create mode 100755 tests/readonly/004
>>  create mode 100644 tests/readonly/004.out
>>  create mode 100755 tests/readonly/005
>>  create mode 100644 tests/readonly/005.out
>>  create mode 100755 tests/readonly/006
>>  create mode 100644 tests/readonly/006.out
>>  create mode 100755 tests/readonly/007
>>  create mode 100644 tests/readonly/007.out
>>  create mode 100755 tests/readonly/008
>>  create mode 100644 tests/readonly/008.out
>>  create mode 100755 tests/readonly/009
>>  create mode 100644 tests/readonly/009.out
>>  create mode 100755 tests/readonly/010
>>  create mode 100644 tests/readonly/010.out
>>  create mode 100755 tests/readonly/011
>>  create mode 100644 tests/readonly/011.out
>>  create mode 100755 tests/readonly/012
>>  create mode 100644 tests/readonly/012.out
>>  create mode 100755 tests/readonly/013
>>  create mode 100644 tests/readonly/013.out
>>  create mode 100755 tests/readonly/014
>>  create mode 100644 tests/readonly/014.out
>>  create mode 100755 tests/readonly/015
>>  create mode 100644 tests/readonly/015.out
>>  create mode 100755 tests/readonly/016
>>  create mode 100644 tests/readonly/016.out
>>  create mode 100755 tests/readonly/017
>>  create mode 100644 tests/readonly/017.out
>>  create mode 100755 tests/readonly/018
>>  create mode 100644 tests/readonly/018.out
>>  create mode 100755 tests/readonly/019
>>  create mode 100644 tests/readonly/019.out
>>  create mode 100755 tests/readonly/020
>>  create mode 100644 tests/readonly/020.out
>>  create mode 100755 tests/readonly/021
>>  create mode 100644 tests/readonly/021.out
>>  create mode 100644 tests/readonly/Makefile
>>  create mode 100644 tests/readonly/group
>>  create mode 100755 tests/squashfs/001
>>  create mode 100644 tests/squashfs/001.out
>>  create mode 100755 tests/squashfs/002
>>  create mode 100644 tests/squashfs/002.out
>>  create mode 100755 tests/squashfs/003
>>  create mode 100644 tests/squashfs/003.out
>>  create mode 100755 tests/squashfs/004
>>  create mode 100644 tests/squashfs/004.out
>>  create mode 100755 tests/squashfs/005
>>  create mode 100644 tests/squashfs/005.out
>>  create mode 100644 tests/squashfs/Makefile
>>  create mode 100644 tests/squashfs/group
>>
>> --
>> 2.16.2.dirty
>>
> 
> .
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/1] squashfs: introduce squashfs support
  2019-01-18  9:37 [PATCH 0/1] squashfs: introduce squashfs support zhengbin
  2019-01-18  9:37 ` [PATCH 1/1] squashfs: add squashfs tests zhengbin
  2019-01-18 12:43 ` [PATCH 0/1] squashfs: introduce squashfs support Eryu Guan
@ 2019-01-21 22:49 ` Dave Chinner
  2 siblings, 0 replies; 5+ messages in thread
From: Dave Chinner @ 2019-01-21 22:49 UTC (permalink / raw)
  To: zhengbin; +Cc: guaneryu, fstests, houtao1, zhaohongjiang

On Fri, Jan 18, 2019 at 05:37:24PM +0800, zhengbin wrote:
> This patch add squashfs support in xfstests-dev. Add two directories
> in tests directory, readonly can also be used for other readonly
> filesystem, squashfs is just used for squashfs filesystem.
> tests/readonly/001        mount test
> tests/readonly/002--010   metadata test
> tests/readonly/011--018   data test
> tests/readonly/019--021   xattr test
> tests/squashfs/001--005   mksquashfs options test
> 
> zhengbin (1):
>   squashfs: add squashfs tests

This needs to be broken up into multiple patches.

At least:
	- one that adds squashfs support
	- one for each of the different infrastructure changes
	  that are needed (e.g. to common/config, to common/rc, etc)
	- one that adds squashfs specific tests
	- the "read-only" tests need to be separated out - 20 tests
	  in a single patch is way too many to review in a single
	  file.

>  .gitignore                                  |   1 +
>  README.squashfs                             |  12 ++
>  check                                       |  19 ++-
>  common/attr                                 |   5 +
>  common/config                               |   6 +
>  common/rc                                   |  63 ++++++++-
>  src/aio-dio-regress/aio-subblock-eof-read.c |  84 ++++++++++++

Why is there a new AIO test hidden in all this? That needs to be in
it's own patch (along with the test that uses it).

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-01-21 22:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-18  9:37 [PATCH 0/1] squashfs: introduce squashfs support zhengbin
2019-01-18  9:37 ` [PATCH 1/1] squashfs: add squashfs tests zhengbin
2019-01-18 12:43 ` [PATCH 0/1] squashfs: introduce squashfs support Eryu Guan
2019-01-21  1:48   ` zhengbin (A)
2019-01-21 22:49 ` Dave Chinner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.