All of lore.kernel.org
 help / color / mirror / Atom feed
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
> 

      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 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.