From: Eryu Guan <guaneryu@gmail.com>
To: Hou Tao <houtao1@huawei.com>
Cc: fstests@vger.kernel.org
Subject: Re: [PATCH] fstests: add support for JFFS2
Date: Wed, 16 Jan 2019 20:09:41 +0800 [thread overview]
Message-ID: <20190116120941.GJ2713@desktop> (raw)
In-Reply-To: <20190104085309.89520-1-houtao1@huawei.com>
On Fri, Jan 04, 2019 at 04:53:09PM +0800, Hou Tao wrote:
> Mainly based on support for UBIFS, and there are two differences
> between them.
(Sorry for the late reivew..)
>
> The major difference is the definitions of TEST_DEV and SCRATCH_DEV
> in local.config.
>
> For UBIFS, TEST_DEV is something like /dev/ubi0_0. It's an UBI volume
> and mount program will handle it correctly. For JFFS2, we can use
> /dev/mtdblockX or mtdX, but can not use /dev/mtdX because mount program
> will complain it is a character device and refuse to mount it.
>
> If /dev/mtdblockX is used, test cases for blkdev will be runnable for
> jffs2, but that will go against our intention because JFFS2 is a filesystem
I'm not familiar with jffs2, could you please give more details on this?
What problems have you seen when using /dev/mtdblockX as
TEST|SCRATCH_DEV? All the tests that have _require_block_device run for
jffs2 but they shouldn't?
If that's the case, I'd suggest to update the _require_block_device rule
to filter out jffs2 explicitly, so we don't have to special-case jffs2's
config.
> used for MTD character device and is not a block filesystem. So we choose
> to use mtdX as TEST_DEV & SCRATCH_DEV and take care of that during fs
> check/mount/umount.
>
> The minor difference is the procedures of making file-system: JFFS2 is
> formatted by flash_erase instead of ubiupdatevol which is usedfor UBIFS.
>
> Serveral bugs have already been spotted by it, especially the one found
> by generic/097.
>
> Signed-off-by: Hou Tao <houtao1@huawei.com>
> ---
> check | 2 ++
> common/config | 13 +++++++++++++
> common/jffs2 | 23 +++++++++++++++++++++++
> common/rc | 45 +++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 83 insertions(+)
> create mode 100644 common/jffs2
>
> diff --git a/check b/check
> index e4d76737..6beef483 100755
> --- a/check
> +++ b/check
> @@ -60,6 +60,7 @@ check options
> -pvfs2 test PVFS2
> -tmpfs test TMPFS
> -ubifs test ubifs
> + -jffs2 test jffs2
> -l line mode diff
> -udiff show unified diff (default)
> -n show me, do not run tests
> @@ -264,6 +265,7 @@ while [ $# -gt 0 ]; do
> -pvfs2) FSTYP=pvfs2 ;;
> -tmpfs) FSTYP=tmpfs ;;
> -ubifs) FSTYP=ubifs ;;
> + -jffs2) FSTYP=jffs2 ;;
>
> -g) group=$2 ; shift ;
> GROUP_LIST="$GROUP_LIST ${group//,/ }"
> diff --git a/common/config b/common/config
> index fb664cf0..f9e932f1 100644
> --- a/common/config
> +++ b/common/config
> @@ -190,6 +190,7 @@ export MAN_PROG="$(type -P man)"
> export NFS4_SETFACL_PROG="$(type -P nfs4_setfacl)"
> export NFS4_GETFACL_PROG="$(type -P nfs4_getfacl)"
> export UBIUPDATEVOL_PROG="$(type -P ubiupdatevol)"
> +export FLASH_ERASE_PROG="$(type -P flash_erase)"
> export THIN_CHECK_PROG="$(type -P thin_check)"
> export PYTHON2_PROG="$(type -P python2)"
> export SQLITE3_PROG="$(type -P sqlite3)"
> @@ -320,6 +321,9 @@ _mount_opts()
> ubifs)
> export MOUNT_OPTIONS=$UBIFS_MOUNT_OPTIONS
> ;;
> + jffs2)
> + export MOUNT_OPTIONS=$JFFS2_MOUNT_OPTIONS
> + ;;
> *)
> ;;
> esac
> @@ -472,6 +476,15 @@ _check_device()
> _fatal "common/config: $name ($dev) is not a directory for overlay"
> fi
> ;;
> + jffs2)
> + if ! grep -q "${dev}:" /proc/mtd &>/dev/null ; then
> + _fatal "common/config: $name ($dev) is not a MTD device"
> + fi
> + dev=/dev/$dev
> + if [ ! -c $dev ]; then
> + _fatal "common/config: $name ($dev) is not a character device"
> + fi
> + ;;
> ubifs)
> if [ ! -c "$dev" ]; then
> _fatal "common/config: $name ($dev) is not a character device"
> diff --git a/common/jffs2 b/common/jffs2
> new file mode 100644
> index 00000000..20611195
> --- /dev/null
> +++ b/common/jffs2
> @@ -0,0 +1,23 @@
> +_jffs2_scratch_mount()
> +{
> + _scratch_options mount
> + _mount -t $FSTYP `_common_dev_mount_options $*` $SCRATCH_OPTIONS \
> + $SCRATCH_DEV $SCRATCH_MNT
> +}
> +
> +_jffs2_test_mount()
> +{
> + _test_options mount
> + _mount -t $FSTYP $TEST_OPTIONS $TEST_FS_MOUNT_OPTS \
> + $SELINUX_MOUNT_OPTIONS $* $TEST_DEV $TEST_DIR
> +}
It seems that above helpers don't do anything special than the default
behavior in _test|scratch_mount() functions, they have the same commands
and options. Did I miss anything?
> +
> +_jffs2_scratch_unmount()
> +{
> + $UMOUNT_PROG $SCRATCH_MNT
> +}
> +
> +_jffs2_test_unmount()
> +{
> + $UMOUNT_PROG $TEST_DIR
> +}
We could just open-code $UMOUNT_PROG $TEST_DIR ($SCRATCH_MNT) in
_test|scratch_unmount(), then we could get rid of common/jffs2 file.
Thanks,
Eryu
> diff --git a/common/rc b/common/rc
> index b8ed1776..887f35ea 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -158,6 +158,10 @@ case "$FSTYP" in
> ubifs)
> [ "$UBIUPDATEVOL_PROG" = "" ] && _fatal "ubiupdatevol not found"
> ;;
> + jffs2)
> + [ "$FLASH_ERASE_PROG" = "" ] && _fatal "flash_erase not found"
> + . ./common/jffs2
> + ;;
> esac
>
> if [ ! -z "$REPORT_LIST" ]; then
> @@ -327,6 +331,9 @@ _try_scratch_mount()
> if [ "$FSTYP" == "overlay" ]; then
> _overlay_scratch_mount $*
> return $?
> + elif [ "$FSTYP" == "jffs2" ]; then
> + _jffs2_scratch_mount $*
> + return $?
> fi
> _mount -t $FSTYP `_scratch_mount_options $*`
> }
> @@ -346,6 +353,9 @@ _scratch_unmount()
> btrfs)
> $UMOUNT_PROG $SCRATCH_MNT
> ;;
> + jffs2)
> + _jffs2_scratch_unmount
> + ;;
> *)
> $UMOUNT_PROG $SCRATCH_DEV
> ;;
> @@ -398,6 +408,9 @@ _test_mount()
> if [ "$FSTYP" == "overlay" ]; then
> _overlay_test_mount $*
> return $?
> + elif [ "$FSTYP" == "jffs2" ]; then
> + _jffs2_test_mount $*
> + return $?
> fi
> _test_options mount
> _mount -t $FSTYP $TEST_OPTIONS $TEST_FS_MOUNT_OPTS $SELINUX_MOUNT_OPTIONS $* $TEST_DEV $TEST_DIR
> @@ -407,6 +420,8 @@ _test_unmount()
> {
> if [ "$FSTYP" == "overlay" ]; then
> _overlay_test_unmount
> + elif [ "$FSTYP" == "jffs2" ]; then
> + _jffs2_test_unmount
> else
> $UMOUNT_PROG $TEST_DEV
> fi
> @@ -709,6 +724,12 @@ _scratch_mkfs()
> $UBIUPDATEVOL_PROG ${SCRATCH_DEV} -t
> return 0
> ;;
> + jffs2)
> + # erase the whole MTD device for jffs2
> + # it will be reformatted automatically on next mount
> + $FLASH_ERASE_PROG -j -q /dev/${SCRATCH_DEV} 0 0
> + return $?
> + ;;
> ext4)
> _scratch_mkfs_ext4 $*
> return $?
> @@ -1505,6 +1526,15 @@ _require_scratch_nocheck()
> _notrun "this test requires a valid \$SCRATCH_MNT and unique $SCRATCH_DEV"
> fi
> ;;
> + jffs2)
> + # jffs2 needs a MTD device
> + if [ ! -c "/dev/$SCRATCH_DEV" ]; then
> + _notrun "this test requires a valid MTD device for \$SCRATCH_DEV"
> + fi
> + if [ ! -d "$SCRATCH_MNT" ]; then
> + _notrun "this test requires a valid \$SCRATCH_MNT"
> + fi
> + ;;
> ubifs)
> # ubifs needs an UBI volume. This will be a char device, not a block device.
> if [ ! -c "$SCRATCH_DEV" ]; then
> @@ -1626,6 +1656,15 @@ _require_test()
> _notrun "this test requires a valid \$TEST_DIR and unique $TEST_DEV"
> fi
> ;;
> + jffs2)
> + # jffs2 needs a MTD device
> + if [ ! -c /dev/"$TEST_DEV" ]; then
> + _notrun "this test requires a valid MTD device for \$TEST_DEV"
> + fi
> + if [ ! -d "$TEST_DIR" ]; then
> + _notrun "this test requires a valid \$TEST_DIR"
> + fi
> + ;;
> ubifs)
> # ubifs needs an UBI volume. This will be a char device, not a block device.
> if [ ! -c "$TEST_DEV" ]; then
> @@ -2624,6 +2663,9 @@ _check_test_fs()
> ubifs)
> # there is no fsck program for ubifs yet
> ;;
> + jffs2)
> + # there is no fsck program for jffs2
> + ;;
> *)
> _check_generic_filesystem $TEST_DEV
> ;;
> @@ -2679,6 +2721,9 @@ _check_scratch_fs()
> ubifs)
> # there is no fsck program for ubifs yet
> ;;
> + jffs2)
> + # there is no fsck program for jffs2
> + ;;
> *)
> _check_generic_filesystem $device
> ;;
> --
> 2.16.2.dirty
>
prev parent reply other threads:[~2019-01-16 12:09 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-04 8:53 [PATCH] fstests: add support for JFFS2 Hou Tao
2019-01-16 12:09 ` Eryu Guan [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190116120941.GJ2713@desktop \
--to=guaneryu@gmail.com \
--cc=fstests@vger.kernel.org \
--cc=houtao1@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).