From: "Darrick J. Wong" <djwong@kernel.org>
To: djwong@kernel.org, guaneryu@gmail.com, zlang@redhat.com
Cc: linux-xfs@vger.kernel.org, fstests@vger.kernel.org, guan@eryu.me,
tytso@mit.edu, linux-ext4@vger.kernel.org
Subject: [PATCH 1/3] common/rc: move ext4-specific helpers into a separate common/ext4 file
Date: Tue, 02 Aug 2022 21:21:46 -0700 [thread overview]
Message-ID: <165950050620.198922.11008917970026033609.stgit@magnolia> (raw)
In-Reply-To: <165950050051.198922.13423077997881086438.stgit@magnolia>
From: Darrick J. Wong <djwong@kernel.org>
Move the ext4-specific parts of common/rc into a separate file and
source it when we test that.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
common/config | 4 +
common/ext4 | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
common/rc | 153 --------------------------------------------------------
3 files changed, 160 insertions(+), 153 deletions(-)
create mode 100644 common/ext4
diff --git a/common/config b/common/config
index c30eec6d..5eaae447 100644
--- a/common/config
+++ b/common/config
@@ -512,6 +512,10 @@ _source_specific_fs()
;;
ext4)
[ "$MKFS_EXT4_PROG" = "" ] && _fatal "mkfs.ext4 not found"
+ . ./common/ext4
+ ;;
+ ext2|ext3|ext4dev)
+ . ./common/ext4
;;
f2fs)
[ "$MKFS_F2FS_PROG" = "" ] && _fatal "mkfs.f2fs not found"
diff --git a/common/ext4 b/common/ext4
new file mode 100644
index 00000000..287705af
--- /dev/null
+++ b/common/ext4
@@ -0,0 +1,156 @@
+#
+# ext4 specific common functions
+#
+
+_setup_large_ext4_fs()
+{
+ local fs_size=$1
+ local tmp_dir=/tmp/
+
+ [ "$LARGE_SCRATCH_DEV" != yes ] && return 0
+ [ -z "$SCRATCH_DEV_EMPTY_SPACE" ] && SCRATCH_DEV_EMPTY_SPACE=0
+ [ $SCRATCH_DEV_EMPTY_SPACE -ge $fs_size ] && return 0
+
+ # Default free space in the FS is 50GB, but you can specify more via
+ # SCRATCH_DEV_EMPTY_SPACE
+ local space_to_consume=$(($fs_size - 50*1024*1024*1024 - $SCRATCH_DEV_EMPTY_SPACE))
+
+ # mount the filesystem and create 16TB - 4KB files until we consume
+ # all the necessary space.
+ _try_scratch_mount 2>&1 >$tmp_dir/mnt.err
+ local status=$?
+ if [ $status -ne 0 ]; then
+ echo "mount failed"
+ cat $tmp_dir/mnt.err >&2
+ rm -f $tmp_dir/mnt.err
+ return $status
+ fi
+ rm -f $tmp_dir/mnt.err
+
+ local file_size=$((16*1024*1024*1024*1024 - 4096))
+ local nfiles=0
+ while [ $space_to_consume -gt $file_size ]; do
+
+ xfs_io -F -f \
+ -c "truncate $file_size" \
+ -c "falloc -k 0 $file_size" \
+ $SCRATCH_MNT/.use_space.$nfiles 2>&1
+ status=$?
+ if [ $status -ne 0 ]; then
+ break;
+ fi
+
+ space_to_consume=$(( $space_to_consume - $file_size ))
+ nfiles=$(($nfiles + 1))
+ done
+
+ # consume the remaining space.
+ if [ $space_to_consume -gt 0 ]; then
+ xfs_io -F -f \
+ -c "truncate $space_to_consume" \
+ -c "falloc -k 0 $space_to_consume" \
+ $SCRATCH_MNT/.use_space.$nfiles 2>&1
+ status=$?
+ fi
+ export NUM_SPACE_FILES=$nfiles
+
+ _scratch_unmount
+ if [ $status -ne 0 ]; then
+ echo "large file prealloc failed"
+ cat $tmp_dir/mnt.err >&2
+ return $status
+ fi
+ return 0
+}
+
+_scratch_mkfs_ext4()
+{
+ local mkfs_cmd="$MKFS_EXT4_PROG -F"
+ local mkfs_filter="grep -v -e ^Warning: -e \"^mke2fs \" | grep -v \"^$\""
+ local tmp=`mktemp -u`
+ local mkfs_status
+
+ [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
+ $mkfs_cmd -O journal_dev $MKFS_OPTIONS $SCRATCH_LOGDEV && \
+ mkfs_cmd="$mkfs_cmd -J device=$SCRATCH_LOGDEV"
+
+ _scratch_do_mkfs "$mkfs_cmd" "$mkfs_filter" $* 2>$tmp.mkfserr 1>$tmp.mkfsstd
+ mkfs_status=$?
+
+ if [ $mkfs_status -eq 0 -a "$LARGE_SCRATCH_DEV" = yes ]; then
+ # manually parse the mkfs output to get the fs size in bytes
+ local fs_size=`cat $tmp.mkfsstd | awk ' \
+ /^Block size/ { split($2, a, "="); bs = a[2] ; } \
+ / inodes, / { blks = $3 } \
+ /reserved for the super user/ { resv = $1 } \
+ END { fssize = bs * blks - resv; print fssize }'`
+
+ _setup_large_ext4_fs $fs_size
+ mkfs_status=$?
+ fi
+
+ # output mkfs stdout and stderr
+ cat $tmp.mkfsstd
+ cat $tmp.mkfserr >&2
+ rm -f $tmp.mkfserr $tmp.mkfsstd
+
+ return $mkfs_status
+}
+
+_ext4_metadump()
+{
+ local device="$1"
+ local dumpfile="$2"
+ local compressopt="$3"
+
+ test -n "$E2IMAGE_PROG" || _fail "e2image not installed"
+ $E2IMAGE_PROG -Q "$device" "$dumpfile"
+ [ "$compressopt" = "compress" ] && [ -n "$DUMP_COMPRESSOR" ] &&
+ $DUMP_COMPRESSOR -f "$dumpfile" &>> "$seqres.full"
+}
+
+# this test requires the ext4 kernel support crc feature on scratch device
+#
+_require_scratch_ext4_crc()
+{
+ _scratch_mkfs_ext4 >/dev/null 2>&1
+ dumpe2fs -h $SCRATCH_DEV 2> /dev/null | grep -q metadata_csum || _notrun "metadata_csum not supported by this filesystem"
+ _try_scratch_mount >/dev/null 2>&1 \
+ || _notrun "Kernel doesn't support metadata_csum feature"
+ _scratch_unmount
+}
+
+# Check whether the specified feature whether it is supported by
+# mkfs.ext4 and the kernel.
+_require_scratch_ext4_feature()
+{
+ if [ -z "$1" ]; then
+ echo "Usage: _require_scratch_ext4_feature feature"
+ exit 1
+ fi
+ $MKFS_EXT4_PROG -F $MKFS_OPTIONS -O "$1" \
+ $SCRATCH_DEV 512m >/dev/null 2>&1 \
+ || _notrun "mkfs.ext4 doesn't support $1 feature"
+ _try_scratch_mount >/dev/null 2>&1 \
+ || _notrun "Kernel doesn't support the ext4 feature(s): $1"
+ _scratch_unmount
+}
+
+# Disable extent zeroing for ext4 on the given device
+_ext4_disable_extent_zeroout()
+{
+ local dev=${1:-$TEST_DEV}
+ local sdev=`_short_dev $dev`
+
+ [ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ] && \
+ echo 0 >/sys/fs/ext4/$sdev/extent_max_zeroout_kb
+}
+
+_require_scratch_richacl_ext4()
+{
+ _scratch_mkfs -O richacl >/dev/null 2>&1 \
+ || _notrun "can't mkfs $FSTYP with option -O richacl"
+ _try_scratch_mount >/dev/null 2>&1 \
+ || _notrun "kernel doesn't support richacl feature on $FSTYP"
+ _scratch_unmount
+}
diff --git a/common/rc b/common/rc
index 197c9415..52dd3b41 100644
--- a/common/rc
+++ b/common/rc
@@ -559,113 +559,6 @@ _scratch_do_mkfs()
return $mkfs_status
}
-_setup_large_ext4_fs()
-{
- local fs_size=$1
- local tmp_dir=/tmp/
-
- [ "$LARGE_SCRATCH_DEV" != yes ] && return 0
- [ -z "$SCRATCH_DEV_EMPTY_SPACE" ] && SCRATCH_DEV_EMPTY_SPACE=0
- [ $SCRATCH_DEV_EMPTY_SPACE -ge $fs_size ] && return 0
-
- # Default free space in the FS is 50GB, but you can specify more via
- # SCRATCH_DEV_EMPTY_SPACE
- local space_to_consume=$(($fs_size - 50*1024*1024*1024 - $SCRATCH_DEV_EMPTY_SPACE))
-
- # mount the filesystem and create 16TB - 4KB files until we consume
- # all the necessary space.
- _try_scratch_mount 2>&1 >$tmp_dir/mnt.err
- local status=$?
- if [ $status -ne 0 ]; then
- echo "mount failed"
- cat $tmp_dir/mnt.err >&2
- rm -f $tmp_dir/mnt.err
- return $status
- fi
- rm -f $tmp_dir/mnt.err
-
- local file_size=$((16*1024*1024*1024*1024 - 4096))
- local nfiles=0
- while [ $space_to_consume -gt $file_size ]; do
-
- xfs_io -F -f \
- -c "truncate $file_size" \
- -c "falloc -k 0 $file_size" \
- $SCRATCH_MNT/.use_space.$nfiles 2>&1
- status=$?
- if [ $status -ne 0 ]; then
- break;
- fi
-
- space_to_consume=$(( $space_to_consume - $file_size ))
- nfiles=$(($nfiles + 1))
- done
-
- # consume the remaining space.
- if [ $space_to_consume -gt 0 ]; then
- xfs_io -F -f \
- -c "truncate $space_to_consume" \
- -c "falloc -k 0 $space_to_consume" \
- $SCRATCH_MNT/.use_space.$nfiles 2>&1
- status=$?
- fi
- export NUM_SPACE_FILES=$nfiles
-
- _scratch_unmount
- if [ $status -ne 0 ]; then
- echo "large file prealloc failed"
- cat $tmp_dir/mnt.err >&2
- return $status
- fi
- return 0
-}
-
-_scratch_mkfs_ext4()
-{
- local mkfs_cmd="$MKFS_EXT4_PROG -F"
- local mkfs_filter="grep -v -e ^Warning: -e \"^mke2fs \" | grep -v \"^$\""
- local tmp=`mktemp -u`
- local mkfs_status
-
- [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
- $mkfs_cmd -O journal_dev $MKFS_OPTIONS $SCRATCH_LOGDEV && \
- mkfs_cmd="$mkfs_cmd -J device=$SCRATCH_LOGDEV"
-
- _scratch_do_mkfs "$mkfs_cmd" "$mkfs_filter" $* 2>$tmp.mkfserr 1>$tmp.mkfsstd
- mkfs_status=$?
-
- if [ $mkfs_status -eq 0 -a "$LARGE_SCRATCH_DEV" = yes ]; then
- # manually parse the mkfs output to get the fs size in bytes
- local fs_size=`cat $tmp.mkfsstd | awk ' \
- /^Block size/ { split($2, a, "="); bs = a[2] ; } \
- / inodes, / { blks = $3 } \
- /reserved for the super user/ { resv = $1 } \
- END { fssize = bs * blks - resv; print fssize }'`
-
- _setup_large_ext4_fs $fs_size
- mkfs_status=$?
- fi
-
- # output mkfs stdout and stderr
- cat $tmp.mkfsstd
- cat $tmp.mkfserr >&2
- rm -f $tmp.mkfserr $tmp.mkfsstd
-
- return $mkfs_status
-}
-
-_ext4_metadump()
-{
- local device="$1"
- local dumpfile="$2"
- local compressopt="$3"
-
- test -n "$E2IMAGE_PROG" || _fail "e2image not installed"
- $E2IMAGE_PROG -Q "$device" "$dumpfile"
- [ "$compressopt" = "compress" ] && [ -n "$DUMP_COMPRESSOR" ] &&
- $DUMP_COMPRESSOR -f "$dumpfile" &>> "$seqres.full"
-}
-
# Capture the metadata of a filesystem in a dump file for offline analysis.
# This is not supported by all filesystem types, so this function should only
# be used after a test has already failed.
@@ -2245,33 +2138,6 @@ _require_non_zoned_device()
fi
}
-# this test requires the ext4 kernel support crc feature on scratch device
-#
-_require_scratch_ext4_crc()
-{
- _scratch_mkfs_ext4 >/dev/null 2>&1
- dumpe2fs -h $SCRATCH_DEV 2> /dev/null | grep -q metadata_csum || _notrun "metadata_csum not supported by this filesystem"
- _try_scratch_mount >/dev/null 2>&1 \
- || _notrun "Kernel doesn't support metadata_csum feature"
- _scratch_unmount
-}
-
-# Check whether the specified feature whether it is supported by
-# mkfs.ext4 and the kernel.
-_require_scratch_ext4_feature()
-{
- if [ -z "$1" ]; then
- echo "Usage: _require_scratch_ext4_feature feature"
- exit 1
- fi
- $MKFS_EXT4_PROG -F $MKFS_OPTIONS -O "$1" \
- $SCRATCH_DEV 512m >/dev/null 2>&1 \
- || _notrun "mkfs.ext4 doesn't support $1 feature"
- _try_scratch_mount >/dev/null 2>&1 \
- || _notrun "Kernel doesn't support the ext4 feature(s): $1"
- _scratch_unmount
-}
-
# this test requires that external log/realtime devices are not in use
#
_require_nonexternal()
@@ -2894,16 +2760,6 @@ _require_fail_make_request()
not found. Seems that CONFIG_FAULT_INJECTION_DEBUG_FS kernel config option not enabled"
}
-# Disable extent zeroing for ext4 on the given device
-_ext4_disable_extent_zeroout()
-{
- local dev=${1:-$TEST_DEV}
- local sdev=`_short_dev $dev`
-
- [ -f /sys/fs/ext4/$sdev/extent_max_zeroout_kb ] && \
- echo 0 >/sys/fs/ext4/$sdev/extent_max_zeroout_kb
-}
-
# The default behavior of SEEK_HOLE is to always return EOF.
# Filesystems that implement non-default behavior return the offset
# of holes with SEEK_HOLE. There is no way to query the filesystem
@@ -3001,15 +2857,6 @@ _require_scratch_richacl_xfs()
_scratch_unmount
}
-_require_scratch_richacl_ext4()
-{
- _scratch_mkfs -O richacl >/dev/null 2>&1 \
- || _notrun "can't mkfs $FSTYP with option -O richacl"
- _try_scratch_mount >/dev/null 2>&1 \
- || _notrun "kernel doesn't support richacl feature on $FSTYP"
- _scratch_unmount
-}
-
_require_scratch_richacl_support()
{
_scratch_mount
next prev parent reply other threads:[~2022-08-03 4:21 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-03 4:21 [PATCHSET 0/3] fstests: refactor ext4-specific code Darrick J. Wong
2022-08-03 4:21 ` Darrick J. Wong [this message]
2022-08-03 4:21 ` [PATCH 2/3] common/rc: move XFS-specific parts of _scratch_options into common/xfs Darrick J. Wong
2022-08-03 4:21 ` [PATCH 3/3] common/ext4: provide custom ext4 scratch fs options Darrick J. Wong
2022-08-03 18:28 ` Zorro Lang
2022-08-03 18:52 ` Darrick J. Wong
2022-08-04 0:25 ` [PATCH v1.2 " Darrick J. Wong
2022-08-04 5:03 ` Darrick J. Wong
2022-08-04 16:29 ` [PATCH v1.3 " Darrick J. Wong
2022-08-05 17:08 ` Zorro Lang
2022-08-06 14:36 ` [PATCHSET 0/3] fstests: refactor ext4-specific code Zorro Lang
2022-08-07 16:30 ` Darrick J. Wong
2022-08-08 15:13 ` Zorro Lang
-- strict thread matches above, loose matches on Subject: below --
2022-08-09 21:00 [PATCHSET v2 " Darrick J. Wong
2022-08-09 21:00 ` [PATCH 1/3] common/rc: move ext4-specific helpers into a separate common/ext4 file Darrick J. Wong
2022-08-11 12:32 ` Christoph Hellwig
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=165950050620.198922.11008917970026033609.stgit@magnolia \
--to=djwong@kernel.org \
--cc=fstests@vger.kernel.org \
--cc=guan@eryu.me \
--cc=guaneryu@gmail.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=tytso@mit.edu \
--cc=zlang@redhat.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