From patchwork Tue Aug 9 21:00:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 12939941 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D53B2C25B08 for ; Tue, 9 Aug 2022 21:02:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229461AbiHIVCW (ORCPT ); Tue, 9 Aug 2022 17:02:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54742 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230439AbiHIVA6 (ORCPT ); Tue, 9 Aug 2022 17:00:58 -0400 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 202DD2C11F; Tue, 9 Aug 2022 14:00:51 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 0BBABCE193E; Tue, 9 Aug 2022 21:00:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 40BB9C433D6; Tue, 9 Aug 2022 21:00:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1660078847; bh=eiPQn7cGJWMMHAwHakKJ/wtSzsCU8/1/HqgFWIpiSmA=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=CDc0UiQ181b/IYCs2KdlG3ndQ1eY/evu1DA73yHQkwsnejOETtPODF6tSlzJdytgl dukmm2EHJ+llXzkQtCEIS/ix5aKAxWhd2SYpFm05e9TmaU7Nt6P1Q57oZDVGtFvLWl krpi7oQQ07Mw8dGGoGxOwDGc00ahy006RSG/H7Zb7PtevOuQ2GWSyJhcpul3MV2StR WENhUjPgD0ZKNH6Qg7/jR2Vo6qB0SKekggNuBCb8yW1WfXs5pd5lOgXCighGAjjvEL D364uitUCOSSq6XXZhx64NX12plpvaXij5Y04y4Yz766y05n9xMK+DA2dZiT7KyLgJ u4+cSWag8lsiA== Subject: [PATCH 1/3] common/rc: move ext4-specific helpers into a separate common/ext4 file From: "Darrick J. Wong" 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 Date: Tue, 09 Aug 2022 14:00:46 -0700 Message-ID: <166007884681.3276300.8815951431509313240.stgit@magnolia> In-Reply-To: <166007884125.3276300.15348421560641051945.stgit@magnolia> References: <166007884125.3276300.15348421560641051945.stgit@magnolia> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org From: Darrick J. Wong 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 Reviewed-by: Christoph Hellwig --- 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 From patchwork Tue Aug 9 21:00:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 12939940 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C4ED0C19F2D for ; Tue, 9 Aug 2022 21:02:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229486AbiHIVCW (ORCPT ); Tue, 9 Aug 2022 17:02:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54644 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230399AbiHIVA5 (ORCPT ); Tue, 9 Aug 2022 17:00:57 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 471BB2C659; Tue, 9 Aug 2022 14:00:54 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 71F1A60B9F; Tue, 9 Aug 2022 21:00:53 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CF2ABC433D6; Tue, 9 Aug 2022 21:00:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1660078852; bh=bnN3+rr2Irc5hVunotTz6N7Asyuu/jHCPgME80PdV/0=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=EwdEeAVmeLmhyGUN7Dyi9mf7JE4cvsQdlP1QcGfNpm57tI/1sMIpvx3/hig7GwxOe Xv9D4YS8pVp2oqD+ttJfylYfaj97ZalB+rcSO3lVbTGzyMZu1F55sDAZ7E8md5AVam +qvP5G1VJFtv0EgLROX2sElULWT1aQdZj03zzEGWFuWmH1oLqPtUYJVwkra4giWAHM pqaZps2YERmd+GBrHc0kb4rpNLc6TJsF3hkvsYHQ8HuZ/0OKJHEFs4y4AKQqwtEeP0 tLV/L/UHJbsGRrkv7bzgIYyqSRpETmXnQ9G8TuZYXcZ1pq8wtstKEaV5q+Nmd1J/1R 5ZypLORPVytfA== Subject: [PATCH 2/3] common/rc: move XFS-specific parts of _scratch_options into common/xfs From: "Darrick J. Wong" 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 Date: Tue, 09 Aug 2022 14:00:52 -0700 Message-ID: <166007885241.3276300.13584305054616588936.stgit@magnolia> In-Reply-To: <166007884125.3276300.15348421560641051945.stgit@magnolia> References: <166007884125.3276300.15348421560641051945.stgit@magnolia> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org From: Darrick J. Wong Move all the non-XFS code in _scratch_options into a _scratch_xfs_options helper in common/xfs, in preparation to add ext4 bits. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig --- common/rc | 23 +++-------------------- common/xfs | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/common/rc b/common/rc index 52dd3b41..dc1d65c3 100644 --- a/common/rc +++ b/common/rc @@ -172,30 +172,13 @@ _clear_mount_stack() _scratch_options() { - local type=$1 - local rt_opt="" - local log_opt="" SCRATCH_OPTIONS="" - if [ "$FSTYP" != "xfs" ]; then - return - fi - - case $type in - mkfs) - SCRATCH_OPTIONS="$SCRATCH_OPTIONS -f" - rt_opt="-r" - log_opt="-l" - ;; - mount) - rt_opt="-o" - log_opt="-o" + case "$FSTYP" in + "xfs") + _scratch_xfs_options "$@" ;; esac - [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \ - SCRATCH_OPTIONS="$SCRATCH_OPTIONS ${rt_opt}rtdev=$SCRATCH_RTDEV" - [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \ - SCRATCH_OPTIONS="$SCRATCH_OPTIONS ${log_opt}logdev=$SCRATCH_LOGDEV" } _test_options() diff --git a/common/xfs b/common/xfs index 9f84dffb..f6f4cdd2 100644 --- a/common/xfs +++ b/common/xfs @@ -265,6 +265,29 @@ _xfs_check() return $status } +_scratch_xfs_options() +{ + local type=$1 + local rt_opt="" + local log_opt="" + + case $type in + mkfs) + SCRATCH_OPTIONS="$SCRATCH_OPTIONS -f" + rt_opt="-r" + log_opt="-l" + ;; + mount) + rt_opt="-o" + log_opt="-o" + ;; + esac + [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_RTDEV" ] && \ + SCRATCH_OPTIONS="$SCRATCH_OPTIONS ${rt_opt}rtdev=$SCRATCH_RTDEV" + [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \ + SCRATCH_OPTIONS="$SCRATCH_OPTIONS ${log_opt}logdev=$SCRATCH_LOGDEV" +} + _scratch_xfs_db_options() { SCRATCH_OPTIONS="" From patchwork Tue Aug 9 21:00:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 12939938 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B71AEC25B08 for ; Tue, 9 Aug 2022 21:01:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230220AbiHIVBa (ORCPT ); Tue, 9 Aug 2022 17:01:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230515AbiHIVBN (ORCPT ); Tue, 9 Aug 2022 17:01:13 -0400 Received: from sin.source.kernel.org (sin.source.kernel.org [IPv6:2604:1380:40e1:4800::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06C9F2CDD1; Tue, 9 Aug 2022 14:01:03 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 2C088CE1992; Tue, 9 Aug 2022 21:01:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E461C433D6; Tue, 9 Aug 2022 21:00:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1660078858; bh=geIKBByfTrorU3rkE/v7f37+Db363m9NvHjWmSVlf3E=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=SRs1zJt7J9fgIrR6UkZfysGj2GPVg9Ti1TEKZprBMm2Xkbbsi9/03qk9Od6JvNvPi Ye1qvMP+Fv3P51nofRu4f3+X1EMBq9DeOGnqFpE1BSAFqTqkuEvcJyASKrGE6nKte8 nnQdbdDruVPOOEpNkTURqz+CA6yOnKo4Ov2EKRKwSz7Q2LpTdz4RaWrZfoEOJ3FRLg miIldHqbVTItYR5148LrExPMAo63hd/1rGX2SBx7TqdgHyq0AFiqwVBvl37h75lshE TMaUaJS8rMlpCTRsPpBuHDLbyB/VTIX5VV+4e9MjlGYq+fpah+Hy8wtK7IiDEsWBo6 00KSsiS3H0XWQ== Subject: [PATCH 3/3] common/ext4: provide custom ext4 scratch fs options From: "Darrick J. Wong" 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 Date: Tue, 09 Aug 2022 14:00:58 -0700 Message-ID: <166007885800.3276300.2421777224579305613.stgit@magnolia> In-Reply-To: <166007884125.3276300.15348421560641051945.stgit@magnolia> References: <166007884125.3276300.15348421560641051945.stgit@magnolia> User-Agent: StGit/0.19 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org From: Darrick J. Wong Create a _scratch_options backend for ext* so that we can inject pathnames to external log devices into the scratch fs mount options. This enables common/dm* to install block device filters, e.g. dm-error for stress testing. Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig --- common/ext4 | 45 +++++++++++++++++++++++++++++++++++++++++---- common/rc | 12 +++++++++++- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/common/ext4 b/common/ext4 index 287705af..f4c3c413 100644 --- a/common/ext4 +++ b/common/ext4 @@ -63,16 +63,32 @@ _setup_large_ext4_fs() return 0 } +_scratch_mkfs_ext4_opts() +{ + mkfs_opts=$* + + _scratch_options mkfs + + echo "$MKFS_EXT4_PROG $SCRATCH_OPTIONS $mkfs_opts" +} + _scratch_mkfs_ext4() { - local mkfs_cmd="$MKFS_EXT4_PROG -F" + local mkfs_cmd="`_scratch_mkfs_ext4_opts`" 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" + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ]; then + $MKFS_EXT4_PROG -F -O journal_dev $MKFS_OPTIONS $* $SCRATCH_LOGDEV 2>$tmp.mkfserr 1>$tmp.mkfsstd + mkjournal_status=$? + + if [ $mkjournal_status -ne 0 ]; then + cat $tmp.mkfsstd + cat $tmp.mkfserr >&2 + return $mkjournal_status + fi + fi _scratch_do_mkfs "$mkfs_cmd" "$mkfs_filter" $* 2>$tmp.mkfserr 1>$tmp.mkfsstd mkfs_status=$? @@ -154,3 +170,24 @@ _require_scratch_richacl_ext4() || _notrun "kernel doesn't support richacl feature on $FSTYP" _scratch_unmount } + +_scratch_ext4_options() +{ + local type=$1 + local log_opt="" + + case $type in + mkfs) + SCRATCH_OPTIONS="$SCRATCH_OPTIONS -F" + log_opt="-J device=$SCRATCH_LOGDEV" + ;; + mount) + # As of kernel 5.19, the kernel mount option path parser only + # accepts direct paths to block devices--the final path + # component cannot be a symlink. + log_opt="-o journal_path=$(realpath -q "$SCRATCH_LOGDEV")" + ;; + esac + [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \ + SCRATCH_OPTIONS="$SCRATCH_OPTIONS ${log_opt}" +} diff --git a/common/rc b/common/rc index dc1d65c3..e20c494c 100644 --- a/common/rc +++ b/common/rc @@ -178,6 +178,9 @@ _scratch_options() "xfs") _scratch_xfs_options "$@" ;; + ext2|ext3|ext4|ext4dev) + _scratch_ext4_options "$@" + ;; esac } @@ -964,6 +967,13 @@ _scratch_mkfs_sized() fi ;; ext2|ext3|ext4|ext4dev) + # Can't use _scratch_mkfs_ext4 here because the block count has + # to come after the device path. + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ]; then + ${MKFS_PROG} -F -O journal_dev $MKFS_OPTIONS $SCRATCH_LOGDEV || \ + _notrun "Could not make scratch logdev" + MKFS_OPTIONS="$MKFS_OPTIONS -J device=$SCRATCH_LOGDEV" + fi ${MKFS_PROG} -t $FSTYP -F $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks ;; gfs2) @@ -1093,7 +1103,7 @@ _scratch_mkfs_blocksized() _scratch_mkfs_xfs $MKFS_OPTIONS -b size=$blocksize ;; ext2|ext3|ext4) - ${MKFS_PROG} -t $FSTYP -F $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV + _scratch_mkfs_ext4 $MKFS_OPTIONS -b $blocksize ;; gfs2) ${MKFS_PROG} -t $FSTYP $MKFS_OPTIONS -O -b $blocksize $SCRATCH_DEV