From patchwork Thu Aug 6 02:13:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 11702699 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D283D14B7 for ; Thu, 6 Aug 2020 02:21:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CA4F82245C for ; Thu, 6 Aug 2020 02:21:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726604AbgHFCVp (ORCPT ); Wed, 5 Aug 2020 22:21:45 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:64121 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726150AbgHFCVp (ORCPT ); Wed, 5 Aug 2020 22:21:45 -0400 X-IronPort-AV: E=Sophos;i="5.75,440,1589212800"; d="scan'208";a="97677616" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 06 Aug 2020 10:21:20 +0800 Received: from G08CNEXMBPEKD06.g08.fujitsu.local (unknown [10.167.33.206]) by cn.fujitsu.com (Postfix) with ESMTP id A1C2A4CE34E9; Thu, 6 Aug 2020 10:21:14 +0800 (CST) Received: from G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.203) by G08CNEXMBPEKD06.g08.fujitsu.local (10.167.33.206) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 6 Aug 2020 10:21:14 +0800 Received: from Fedora-30.g08.fujitsu.local (10.167.220.106) by G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 6 Aug 2020 10:21:15 +0800 From: Xiao Yang To: CC: , , , Xiao Yang Subject: [PATCH v9 1/8] common/rc: Introduce helpers for new dax mount options and FS_XFLAG_DAX Date: Thu, 6 Aug 2020 10:13:35 +0800 Message-ID: <20200806021342.10596-2-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> References: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: A1C2A4CE34E9.AC94D X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org 1) _check_scratch_dax_mountopt() checks old/new dax mount option and returns a value. 2) _require_scratch_dax_mountopt() throws notrun if _check_scratch_dax_mountopt() returns a non-zero value. 3) _require_dax_iflag() checks FS_XFLAG_DAX. Signed-off-by: Xiao Yang Reviewed-by: Darrick J. Wong --- common/rc | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/common/rc b/common/rc index 1b7b2575..fa70453d 100644 --- a/common/rc +++ b/common/rc @@ -3188,6 +3188,58 @@ _require_scratch_dax() _scratch_unmount } +# Check if dax mount options are supported +# +# $1 can be either 'dax=always' or 'dax' +# +# dax=always +# Check for the new dax options (dax=inode, dax=always or dax=never) +# by passing "dax=always". +# dax +# Check for the old dax or new dax=always by passing "dax". +# +# This only accepts 'dax=always' because dax=always, dax=inode and +# dax=never are always supported together. So if the other options are +# required checking for 'dax=always' indicates support for the other 2. +# +# Return 0 if filesystem/device supports the specified dax option. +# Return 1 if mount fails with the specified dax option. +# Return 2 if /proc/mounts shows wrong dax option. +_check_scratch_dax_mountopt() +{ + local option=$1 + + _require_scratch + _scratch_mkfs > /dev/null 2>&1 + + _try_scratch_mount "-o $option" > /dev/null 2>&1 || return 1 + + if _fs_options $SCRATCH_DEV | egrep -q "dax(=always|,|$)"; then + _scratch_unmount + return 0 + else + _scratch_unmount + return 2 + fi +} + +# Throw notrun if _check_scratch_dax_mountopt() returns a non-zero value. +_require_scratch_dax_mountopt() +{ + local mountopt=$1 + + _check_scratch_dax_mountopt "$mountopt" + local res=$? + + [ $res -eq 1 ] && _notrun "mount $SCRATCH_DEV with $mountopt failed" + [ $res -eq 2 ] && _notrun "$SCRATCH_DEV $FSTYP does not support -o $mountopt" +} + +_require_dax_iflag() +{ + _require_xfs_io_command "chattr" "x" +} + # Does norecovery support by this fs? _require_norecovery() { From patchwork Thu Aug 6 02:13:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 11702695 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 08FAF138C for ; Thu, 6 Aug 2020 02:21:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0099920823 for ; Thu, 6 Aug 2020 02:21:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726197AbgHFCVn (ORCPT ); Wed, 5 Aug 2020 22:21:43 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:64121 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726150AbgHFCVn (ORCPT ); Wed, 5 Aug 2020 22:21:43 -0400 X-IronPort-AV: E=Sophos;i="5.75,440,1589212800"; d="scan'208";a="97677618" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 06 Aug 2020 10:21:20 +0800 Received: from G08CNEXMBPEKD04.g08.fujitsu.local (unknown [10.167.33.201]) by cn.fujitsu.com (Postfix) with ESMTP id 371C84CE34EF; Thu, 6 Aug 2020 10:21:15 +0800 (CST) Received: from G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.203) by G08CNEXMBPEKD04.g08.fujitsu.local (10.167.33.201) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 6 Aug 2020 10:21:16 +0800 Received: from Fedora-30.g08.fujitsu.local (10.167.220.106) by G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 6 Aug 2020 10:21:15 +0800 From: Xiao Yang To: CC: , , , Xiao Yang Subject: [PATCH v9 2/8] fstests: Use _require_scratch_dax_mountopt() and _require_dax_iflag() Date: Thu, 6 Aug 2020 10:13:36 +0800 Message-ID: <20200806021342.10596-3-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> References: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: 371C84CE34EF.ACB16 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org 1) Make related tests use _require_scratch_dax_mountopt() and _require_dax_iflag(). 2) Remove unused _require_scratch_dax(). Signed-off-by: Xiao Yang Reviewed-by: Ira Weiny Reviewed-by: Darrick J. Wong --- common/rc | 14 -------------- tests/ext4/030 | 2 +- tests/ext4/031 | 4 ++-- tests/generic/413 | 2 +- tests/generic/462 | 2 +- tests/xfs/260 | 4 ++-- 6 files changed, 7 insertions(+), 21 deletions(-) diff --git a/common/rc b/common/rc index fa70453d..359d03ad 100644 --- a/common/rc +++ b/common/rc @@ -3174,20 +3174,6 @@ _require_scratch_shutdown() _scratch_unmount } -# Does dax mount option work on this dev/fs? -_require_scratch_dax() -{ - _require_scratch - _scratch_mkfs > /dev/null 2>&1 - _try_scratch_mount -o dax || \ - _notrun "mount $SCRATCH_DEV with dax failed" - # Check options to be sure. XFS ignores dax option - # and goes on if dev underneath does not support dax. - _fs_options $SCRATCH_DEV | grep -qw "dax" || \ - _notrun "$SCRATCH_DEV $FSTYP does not support -o dax" - _scratch_unmount -} - # Check if dax mount options are supported # # $1 can be either 'dax=always' or 'dax' diff --git a/tests/ext4/030 b/tests/ext4/030 index 93bbca86..fb5cf451 100755 --- a/tests/ext4/030 +++ b/tests/ext4/030 @@ -33,7 +33,7 @@ rm -f $seqres.full # Modify as appropriate. _supported_os Linux _supported_fs ext4 -_require_scratch_dax +_require_scratch_dax_mountopt "dax" _require_test_program "t_ext4_dax_journal_corruption" _require_command "$CHATTR_PROG" chattr diff --git a/tests/ext4/031 b/tests/ext4/031 index dc58214e..20e2fab7 100755 --- a/tests/ext4/031 +++ b/tests/ext4/031 @@ -37,7 +37,7 @@ MOUNT_OPTIONS="" # Modify as appropriate. _supported_os Linux _supported_fs ext4 -_require_scratch_dax +_require_scratch_dax_mountopt "dax" _require_test_program "t_ext4_dax_inline_corruption" _require_scratch_ext4_feature "inline_data" @@ -56,7 +56,7 @@ _scratch_unmount >> $seqres.full 2>&1 _try_scratch_mount "-o dax" >> $seqres.full 2>&1 if [[ $? != 0 ]]; then - # _require_scratch_dax already verified that we could mount with DAX. + # _require_scratch_dax_mountopt already verified that we could mount with DAX. # Failure here is expected because we have inline data. echo "Silence is golden" status=0 diff --git a/tests/generic/413 b/tests/generic/413 index 1ce89aff..19e1b926 100755 --- a/tests/generic/413 +++ b/tests/generic/413 @@ -31,7 +31,7 @@ rm -f $seqres.full _supported_fs generic _supported_os Linux _require_test -_require_scratch_dax +_require_scratch_dax_mountopt "dax" _require_test_program "feature" _require_test_program "t_mmap_dio" _require_xfs_io_command "falloc" diff --git a/tests/generic/462 b/tests/generic/462 index 1ab6cadc..4a940239 100755 --- a/tests/generic/462 +++ b/tests/generic/462 @@ -37,7 +37,7 @@ rm -f $seqres.full _supported_fs generic _supported_os Linux _require_test -_require_scratch_dax +_require_scratch_dax_mountopt "dax" _require_test_program "t_mmap_write_ro" # running by unpriviliged user is not necessary to reproduce # this bug, just trying to test more. diff --git a/tests/xfs/260 b/tests/xfs/260 index 3464ffef..bcdc6041 100755 --- a/tests/xfs/260 +++ b/tests/xfs/260 @@ -30,10 +30,10 @@ rm -f $seqres.full _supported_fs xfs _supported_os Linux -_require_scratch_dax +_require_scratch_dax_mountopt "dax" _require_test_program "feature" _require_test_program "t_mmap_dio" -_require_xfs_io_command "chattr" "x" +_require_dax_iflag _require_xfs_io_command "falloc" prep_files() From patchwork Thu Aug 6 02:13:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 11702693 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7E4AE138C for ; Thu, 6 Aug 2020 02:21:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6C11D22B40 for ; Thu, 6 Aug 2020 02:21:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726490AbgHFCVl (ORCPT ); Wed, 5 Aug 2020 22:21:41 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:34557 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726360AbgHFCVl (ORCPT ); Wed, 5 Aug 2020 22:21:41 -0400 X-IronPort-AV: E=Sophos;i="5.75,440,1589212800"; d="scan'208";a="97677617" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 06 Aug 2020 10:21:20 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id B32664CE34E0; Thu, 6 Aug 2020 10:21:15 +0800 (CST) Received: from G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.203) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 6 Aug 2020 10:21:16 +0800 Received: from Fedora-30.g08.fujitsu.local (10.167.220.106) by G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 6 Aug 2020 10:21:16 +0800 From: Xiao Yang To: CC: , , , Xiao Yang Subject: [PATCH v9 3/8] generic/223: Don't clear MKFS_OPTION before calling _scratch_mkfs_geom() Date: Thu, 6 Aug 2020 10:13:37 +0800 Message-ID: <20200806021342.10596-4-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> References: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: B32664CE34E0.AB5BE X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org Current _scratch_mkfs_geom() adds geometry parameters to the end of the MKFS_OPTIONS blindly. ext4 can accept the last one if geometry parameters and original MKFS_OPTION have the same mkfs options but xfs cannot accept them and reports "xxx option is respecified" error. Make _scratch_mkfs_geom() override the same mkfs options in original MKFS_OPTION by geometry parameters. With this change, generic/223 doesn't need to clear original MKFS_OPTION before calling _scratch_mkfs_geom() and can use other mkfs options in original MKFS_OPTION. Signed-off-by: Xiao Yang Reviewed-by: Darrick J. Wong --- common/rc | 14 +++++++++++++- tests/generic/223 | 1 - 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/common/rc b/common/rc index 359d03ad..ad4d080d 100644 --- a/common/rc +++ b/common/rc @@ -1051,7 +1051,19 @@ _scratch_mkfs_geom() case $FSTYP in xfs) - MKFS_OPTIONS+=" -b size=$blocksize, -d su=$sunit_bytes,sw=$swidth_mult" + if echo "$MKFS_OPTIONS" | egrep -q "b?size="; then + MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r "s/(b?size=)[0-9]+/\1$blocksize/") + else + MKFS_OPTIONS+=" -b size=$blocksize" + fi + + if echo "$MKFS_OPTIONS" | egrep -q "(su|sunit|sw|swidth)="; then + MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r \ + -e "s/(su|sunit)=[0-9kmg]+/su=$sunit_bytes/" \ + -e "s/(sw|swidth)=[0-9kmg]+/sw=$swidth_mult/") + else + MKFS_OPTIONS+=" -d su=$sunit_bytes,sw=$swidth_mult" + fi ;; ext4|ext4dev) MKFS_OPTIONS+=" -b $blocksize -E stride=$sunit_blocks,stripe_width=$swidth_blocks" diff --git a/tests/generic/223 b/tests/generic/223 index 6cfd00dd..ba7c9a44 100755 --- a/tests/generic/223 +++ b/tests/generic/223 @@ -41,7 +41,6 @@ for SUNIT_K in 8 16 32 64 128; do let SUNIT_BLOCKS=$SUNIT_BYTES/$BLOCKSIZE echo "=== mkfs with su $SUNIT_BLOCKS blocks x 4 ===" - export MKFS_OPTIONS="" _scratch_mkfs_geom $SUNIT_BYTES 4 $BLOCKSIZE >> $seqres.full 2>&1 _scratch_mount From patchwork Thu Aug 6 02:13:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 11702691 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9CBE314B7 for ; Thu, 6 Aug 2020 02:21:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9334E22B40 for ; Thu, 6 Aug 2020 02:21:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726005AbgHFCVj (ORCPT ); Wed, 5 Aug 2020 22:21:39 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:64121 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726150AbgHFCVi (ORCPT ); Wed, 5 Aug 2020 22:21:38 -0400 X-IronPort-AV: E=Sophos;i="5.75,440,1589212800"; d="scan'208";a="97677614" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 06 Aug 2020 10:21:20 +0800 Received: from G08CNEXMBPEKD06.g08.fujitsu.local (unknown [10.167.33.206]) by cn.fujitsu.com (Postfix) with ESMTP id 38AC44CE34F3; Thu, 6 Aug 2020 10:21:16 +0800 (CST) Received: from G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.203) by G08CNEXMBPEKD06.g08.fujitsu.local (10.167.33.206) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 6 Aug 2020 10:21:16 +0800 Received: from Fedora-30.g08.fujitsu.local (10.167.220.106) by G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 6 Aug 2020 10:21:16 +0800 From: Xiao Yang To: CC: , , , Xiao Yang Subject: [PATCH v9 4/8] generic/413, xfs/260: Improve format operation for PMD fault testing Date: Thu, 6 Aug 2020 10:13:38 +0800 Message-ID: <20200806021342.10596-5-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> References: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: 38AC44CE34F3.ACBF9 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org 1) Simple code and fix the wrong value of stripe_width by _scratch_mkfs_geom(). 2) Get hugepage size by _get_hugepagesize() and replace fixed 2M with hugepage size because hugepage size/PMD_SIZE is not 2M on some arches(e.g. hugepage size/PMD_SIZE is 512M on arm64). 3) For debugging, redirect the output of mkfs to $seqres.full. Signed-off-by: Xiao Yang Reviewed-by: Darrick J. Wong --- common/rc | 10 ++++++++++ tests/generic/413 | 10 ++-------- tests/xfs/260 | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/common/rc b/common/rc index ad4d080d..98bb1454 100644 --- a/common/rc +++ b/common/rc @@ -170,6 +170,16 @@ _get_filesize() stat -c %s "$1" } +# Get hugepagesize in bytes +_get_hugepagesize() +{ + local hugepgsz=$(awk '/Hugepagesize/ {print $2}' /proc/meminfo) + # Call _notrun if $hugepgsz is not a number + echo "$hugepgsz" | egrep -q ^[0-9]+$ || \ + _notrun "Cannot get the value of Hugepagesize" + echo $((hugepgsz * 1024)) +} + _mount() { $MOUNT_PROG `_mount_ops_filter $*` diff --git a/tests/generic/413 b/tests/generic/413 index 19e1b926..dfe2912b 100755 --- a/tests/generic/413 +++ b/tests/generic/413 @@ -111,14 +111,8 @@ do_tests() t_mmap_dio_dax $((64 * 1024 * 1024)) } -# make fs 2Mb aligned for PMD fault testing -mkfs_opts="" -if [ "$FSTYP" == "ext4" ]; then - mkfs_opts="-E stride=512,stripe_width=1" -elif [ "$FSTYP" == "xfs" ]; then - mkfs_opts="-d su=2m,sw=1" -fi -_scratch_mkfs "$mkfs_opts" > /dev/null 2>&1 +# make fs aligned for PMD fault testing +_scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1 # mount SCRATCH_DEV with dax option, TEST_DEV not export MOUNT_OPTIONS="" diff --git a/tests/xfs/260 b/tests/xfs/260 index bcdc6041..81b42f01 100755 --- a/tests/xfs/260 +++ b/tests/xfs/260 @@ -121,8 +121,8 @@ do_tests() t_dax_flag_mmap_dio $((64 * 1024 * 1024)) } -# make xfs 2Mb aligned for PMD fault testing -_scratch_mkfs "-d su=2m,sw=1" > /dev/null 2>&1 +# make xfs aligned for PMD fault testing +_scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1 # mount with dax option _scratch_mount "-o dax" From patchwork Thu Aug 6 02:13:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 11702697 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 12E25138C for ; Thu, 6 Aug 2020 02:21:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 09FD120823 for ; Thu, 6 Aug 2020 02:21:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726360AbgHFCVo (ORCPT ); Wed, 5 Aug 2020 22:21:44 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:34557 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726524AbgHFCVo (ORCPT ); Wed, 5 Aug 2020 22:21:44 -0400 X-IronPort-AV: E=Sophos;i="5.75,440,1589212800"; d="scan'208";a="97677615" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 06 Aug 2020 10:21:20 +0800 Received: from G08CNEXMBPEKD04.g08.fujitsu.local (unknown [10.167.33.201]) by cn.fujitsu.com (Postfix) with ESMTP id B427D4CE34F1; Thu, 6 Aug 2020 10:21:16 +0800 (CST) Received: from G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.203) by G08CNEXMBPEKD04.g08.fujitsu.local (10.167.33.201) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 6 Aug 2020 10:21:17 +0800 Received: from Fedora-30.g08.fujitsu.local (10.167.220.106) by G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 6 Aug 2020 10:21:17 +0800 From: Xiao Yang To: CC: , , , Xiao Yang Subject: [PATCH v9 5/8] xfs/260: Move and update xfs/260 Date: Thu, 6 Aug 2020 10:13:39 +0800 Message-ID: <20200806021342.10596-6-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> References: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: B427D4CE34F1.AD939 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org 1) Both ext4 and xfs have supported FS_XFLAG_DAX so move it to generic. 2) Modifying FS_XFLAG_DAX on flies does not take effect immediately so make files inherit the DAX state of parent directory. 3) Setting/clearing FS_XFLAG_DAX have no chance to change S_DAX flag if mount with dax option so remove the related subtest. 4) Setting/clearing FS_XFLAG_DAX doesn't change S_DAX flag on older xfs due to commit 742d84290739 ("xfs: disable per-inode DAX flag") so only do test when fs supports new dax=inode option. Signed-off-by: Xiao Yang Signed-off-by: Ira Weiny Reviewed-by: Ira Weiny Reviewed-by: Darrick J. Wong --- tests/{xfs/260 => generic/605} | 73 +++++++++++++++++++--------------- tests/generic/605.out | 2 + tests/generic/group | 1 + tests/xfs/260.out | 2 - tests/xfs/group | 1 - 5 files changed, 43 insertions(+), 36 deletions(-) rename tests/{xfs/260 => generic/605} (58%) create mode 100644 tests/generic/605.out delete mode 100644 tests/xfs/260.out diff --git a/tests/xfs/260 b/tests/generic/605 similarity index 58% rename from tests/xfs/260 rename to tests/generic/605 index 81b42f01..b2471f02 100755 --- a/tests/xfs/260 +++ b/tests/generic/605 @@ -2,7 +2,7 @@ # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2017 Red Hat Inc. All Rights Reserved. # -# FS QA Test 260 +# FS QA Test 605 # # Test per-inode DAX flag by mmap direct/buffered IO. # @@ -28,76 +28,80 @@ _cleanup() # remove previous $seqres.full before test rm -f $seqres.full -_supported_fs xfs +_supported_fs generic _supported_os Linux -_require_scratch_dax_mountopt "dax" +_require_scratch_dax_mountopt "dax=always" _require_test_program "feature" _require_test_program "t_mmap_dio" _require_dax_iflag _require_xfs_io_command "falloc" -prep_files() +SRC_DIR=$SCRATCH_MNT/src +SRC_FILE=$SRC_DIR/tf_s +DST_DIR=$SCRATCH_MNT/dst +DST_FILE=$DST_DIR/tf_d + +prep_directories() { - rm -f $SCRATCH_MNT/tf_{s,d} + mkdir -p $SRC_DIR $DST_DIR +} +prep_files() +{ + rm -f $SRC_FILE $DST_FILE $XFS_IO_PROG -f -c "falloc 0 $tsize" \ - $SCRATCH_MNT/tf_{s,d} >> $seqres.full 2>&1 + $SRC_FILE $DST_FILE >> $seqres.full 2>&1 } t_both_dax() { + $XFS_IO_PROG -c "chattr +x" $SRC_DIR $DST_DIR prep_files - $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_{s,d} # with O_DIRECT first - $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} $1 "dio both dax" + $here/src/t_mmap_dio $SRC_FILE $DST_FILE \ + $1 "dio both dax" prep_files - $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_{s,d} # again with buffered IO - $here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \ + $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \ $1 "buffered both dax" } t_nondax_to_dax() { + $XFS_IO_PROG -c "chattr -x" $SRC_DIR + $XFS_IO_PROG -c "chattr +x" $DST_DIR prep_files - $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_s - $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_d - $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \ + $here/src/t_mmap_dio $SRC_FILE $DST_FILE \ $1 "dio nondax to dax" prep_files - $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_s - $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_d - $here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \ + $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \ $1 "buffered nondax to dax" } t_dax_to_nondax() { + $XFS_IO_PROG -c "chattr +x" $SRC_DIR + $XFS_IO_PROG -c "chattr -x" $DST_DIR prep_files - $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_s - $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_d - $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \ + $here/src/t_mmap_dio $SRC_FILE $DST_FILE \ $1 "dio dax to nondax" prep_files - $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_s - $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_d - $here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \ + $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \ $1 "buffered dax to nondax" } t_both_nondax() { + $XFS_IO_PROG -c "chattr -x" $SRC_DIR $DST_DIR prep_files - $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d} - $here/src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \ + $here/src/t_mmap_dio $SRC_FILE $DST_FILE \ $1 "dio both nondax" prep_files - $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d} - $here/src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \ + $here/src/t_mmap_dio -b $SRC_FILE $DST_FILE \ $1 "buffered both nondax" } @@ -112,6 +116,11 @@ t_dax_flag_mmap_dio() do_tests() { + local mount_option=$1 + + _scratch_mount "$mount_option" + + prep_directories # less than page size t_dax_flag_mmap_dio 1024 # page size @@ -119,22 +128,20 @@ do_tests() # bigger sizes, for PMD faults t_dax_flag_mmap_dio $((16 * 1024 * 1024)) t_dax_flag_mmap_dio $((64 * 1024 * 1024)) + + _scratch_unmount } # make xfs aligned for PMD fault testing _scratch_mkfs_geom $(_get_hugepagesize) 1 >> $seqres.full 2>&1 -# mount with dax option -_scratch_mount "-o dax" - tsize=$((128 * 1024 * 1024)) -do_tests -_scratch_unmount +# mount with dax=inode option +do_tests "-o dax=inode" -# mount again without dax option +# mount without dax option export MOUNT_OPTIONS="" -_scratch_mount do_tests # success, all done diff --git a/tests/generic/605.out b/tests/generic/605.out new file mode 100644 index 00000000..1ae20049 --- /dev/null +++ b/tests/generic/605.out @@ -0,0 +1,2 @@ +QA output created by 605 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index 75d56838..d06c1bf6 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -607,3 +607,4 @@ 602 auto quick encrypt 603 auto quick quota 604 auto quick mount +605 auto attr quick dax diff --git a/tests/xfs/260.out b/tests/xfs/260.out deleted file mode 100644 index 18ca517c..00000000 --- a/tests/xfs/260.out +++ /dev/null @@ -1,2 +0,0 @@ -QA output created by 260 -Silence is golden diff --git a/tests/xfs/group b/tests/xfs/group index d6e8d1c3..ed0d389e 100644 --- a/tests/xfs/group +++ b/tests/xfs/group @@ -257,7 +257,6 @@ 257 auto quick clone 258 auto quick clone 259 auto quick -260 auto attr quick dax 261 auto quick quota 262 dangerous_fuzzers dangerous_scrub dangerous_online_repair 263 auto quick quota From patchwork Thu Aug 6 02:13:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 11702689 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1371E138C for ; Thu, 6 Aug 2020 02:21:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0A4F12245C for ; Thu, 6 Aug 2020 02:21:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726204AbgHFCVi (ORCPT ); Wed, 5 Aug 2020 22:21:38 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:34557 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726005AbgHFCVi (ORCPT ); Wed, 5 Aug 2020 22:21:38 -0400 X-IronPort-AV: E=Sophos;i="5.75,440,1589212800"; d="scan'208";a="97677612" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 06 Aug 2020 10:21:19 +0800 Received: from G08CNEXMBPEKD05.g08.fujitsu.local (unknown [10.167.33.204]) by cn.fujitsu.com (Postfix) with ESMTP id 337054CE34F5; Thu, 6 Aug 2020 10:21:17 +0800 (CST) Received: from G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.203) by G08CNEXMBPEKD05.g08.fujitsu.local (10.167.33.204) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 6 Aug 2020 10:21:18 +0800 Received: from Fedora-30.g08.fujitsu.local (10.167.220.106) by G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 6 Aug 2020 10:21:17 +0800 From: Xiao Yang To: CC: , , , Xiao Yang Subject: [PATCH v9 6/8] generic: Verify if statx() can qurey S_DAX flag on regular file correctly Date: Thu, 6 Aug 2020 10:13:40 +0800 Message-ID: <20200806021342.10596-7-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> References: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: 337054CE34F5.AA16E X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org 1) With new kernel(e.g. v5.8-rc1), statx() can be used to qurey S_DAX flag on regular file, so add a test to verify the feature. 2) Factor out _check_s_dax() so that other tests can use it in future. Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=712b2698e4c024b561694cbcc1abba13eb0fd9ce Signed-off-by: Xiao Yang Reviewed-by: Ira Weiny Reviewed-by: Darrick J. Wong --- common/rc | 13 ++++++ tests/generic/606 | 92 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/606.out | 2 + tests/generic/group | 1 + 4 files changed, 108 insertions(+) create mode 100644 tests/generic/606 create mode 100644 tests/generic/606.out diff --git a/common/rc b/common/rc index 98bb1454..de431c7a 100644 --- a/common/rc +++ b/common/rc @@ -3196,6 +3196,19 @@ _require_scratch_shutdown() _scratch_unmount } +_check_s_dax() +{ + local target=$1 + local exp_s_dax=$2 + + local attributes=$($XFS_IO_PROG -c 'statx -r' $target | awk '/stat.attributes / { print $3 }') + if [ $exp_s_dax -eq 0 ]; then + (( attributes & 0x2000 )) && echo "$target has unexpected S_DAX flag" + else + (( attributes & 0x2000 )) || echo "$target doen't have expected S_DAX flag" + fi +} + # Check if dax mount options are supported # # $1 can be either 'dax=always' or 'dax' diff --git a/tests/generic/606 b/tests/generic/606 new file mode 100644 index 00000000..bf7d822d --- /dev/null +++ b/tests/generic/606 @@ -0,0 +1,92 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2020 Fujitsu. All Rights Reserved. +# +# FS QA Test 606 +# +# By the following cases, verify if statx() can query S_DAX flag +# on regular file correctly. +# 1) With dax=always option, FS_XFLAG_DAX is ignored and S_DAX flag +# always exists on regular file. +# 2) With dax=inode option, setting/clearing FS_XFLAG_DAX can change +# S_DAX flag on regular file. +# 3) With dax=never option, FS_XFLAG_DAX is ignored and S_DAX flag +# never exists on regular file. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +_supported_fs generic +_supported_os Linux +_require_scratch_dax_mountopt "dax=always" +_require_dax_iflag +_require_xfs_io_command "statx" "-r" + +PARENT_DIR=$SCRATCH_MNT/testdir +TEST_FILE=$PARENT_DIR/testfile + +test_s_dax() +{ + local dax_option=$1 + local exp_s_dax1=$2 + local exp_s_dax2=$3 + + # Mount with specified dax option + _scratch_mount "$dax_option" + + # Prepare directory + mkdir -p $PARENT_DIR + + rm -f $TEST_FILE + $XFS_IO_PROG -c "chattr +x" $PARENT_DIR + touch $TEST_FILE + # Check if setting FS_XFLAG_DAX changes S_DAX flag + _check_s_dax $TEST_FILE $exp_s_dax1 + + rm -f $TEST_FILE + $XFS_IO_PROG -c "chattr -x" $PARENT_DIR + touch $TEST_FILE + # Check if clearing FS_XFLAG_DAX changes S_DAX flag + _check_s_dax $TEST_FILE $exp_s_dax2 + + _scratch_unmount +} + +do_tests() +{ + _scratch_mkfs >> $seqres.full 2>&1 + + # Mount with specified dax option + test_s_dax "-o dax=always" 1 1 + test_s_dax "-o dax=never" 0 0 + test_s_dax "-o dax=inode" 1 0 + # Mount without dax option + export MOUNT_OPTIONS="" + test_s_dax "" 1 0 +} + +do_tests + +# success, all done +echo "Silence is golden" +status=0 +exit diff --git a/tests/generic/606.out b/tests/generic/606.out new file mode 100644 index 00000000..09bf888e --- /dev/null +++ b/tests/generic/606.out @@ -0,0 +1,2 @@ +QA output created by 606 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index d06c1bf6..05c6b02d 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -608,3 +608,4 @@ 603 auto quick quota 604 auto quick mount 605 auto attr quick dax +606 auto attr quick dax From patchwork Thu Aug 6 02:13:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 11702703 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C8C5E138C for ; Thu, 6 Aug 2020 02:21:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C089520823 for ; Thu, 6 Aug 2020 02:21:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726551AbgHFCVs (ORCPT ); Wed, 5 Aug 2020 22:21:48 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:34557 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726524AbgHFCVs (ORCPT ); Wed, 5 Aug 2020 22:21:48 -0400 X-IronPort-AV: E=Sophos;i="5.75,440,1589212800"; d="scan'208";a="97677619" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 06 Aug 2020 10:21:20 +0800 Received: from G08CNEXMBPEKD06.g08.fujitsu.local (unknown [10.167.33.206]) by cn.fujitsu.com (Postfix) with ESMTP id AA2F34CE34F4; Thu, 6 Aug 2020 10:21:17 +0800 (CST) Received: from G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.203) by G08CNEXMBPEKD06.g08.fujitsu.local (10.167.33.206) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 6 Aug 2020 10:21:17 +0800 Received: from Fedora-30.g08.fujitsu.local (10.167.220.106) by G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 6 Aug 2020 10:21:18 +0800 From: Xiao Yang To: CC: , , , Xiao Yang Subject: [PATCH v9 7/8] generic: Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations Date: Thu, 6 Aug 2020 10:13:41 +0800 Message-ID: <20200806021342.10596-8-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> References: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: AA2F34CE34F4.AE28B X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org Also factor out _check_xflag() so that other tests can use it in future. Signed-off-by: Xiao Yang Reviewed-by: Ira Weiny Reviewed-by: Darrick J. Wong --- common/rc | 12 +++ tests/generic/607 | 189 ++++++++++++++++++++++++++++++++++++++++++ tests/generic/607.out | 2 + tests/generic/group | 1 + 4 files changed, 204 insertions(+) create mode 100644 tests/generic/607 create mode 100644 tests/generic/607.out diff --git a/common/rc b/common/rc index de431c7a..062eb6ba 100644 --- a/common/rc +++ b/common/rc @@ -3209,6 +3209,18 @@ _check_s_dax() fi } +_check_xflag() +{ + local target=$1 + local exp_xflag=$2 + + if [ $exp_xflag -eq 0 ]; then + _test_inode_flag dax $target && echo "$target has unexpected FS_XFLAG_DAX flag" + else + _test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag" + fi +} + # Check if dax mount options are supported # # $1 can be either 'dax=always' or 'dax' diff --git a/tests/generic/607 b/tests/generic/607 new file mode 100644 index 00000000..b15085ea --- /dev/null +++ b/tests/generic/607 @@ -0,0 +1,189 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2020 Fujitsu. All Rights Reserved. +# +# FS QA Test 607 +# +# Verify the inheritance behavior of FS_XFLAG_DAX flag in various combinations. +# 1) New files and directories automatically inherit FS_XFLAG_DAX from their parent directory. +# 2) cp operation make files and directories inherit the FS_XFLAG_DAX from new parent directory. +# 3) mv operation make files and directories preserve the FS_XFLAG_DAX from old parent directory. +# In addition, setting/clearing FS_XFLAG_DAX flag is not impacted by dax mount options. + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +_supported_fs generic +_supported_os Linux +_require_scratch +_require_dax_iflag +_require_xfs_io_command "lsattr" "-v" + +# If a/ is +x, check that a's new children +# inherit +x from a/. +test_xflag_inheritance1() +{ + mkdir -p a + $XFS_IO_PROG -c "chattr +x" a + mkdir -p a/b/c + touch a/b/c/d + + _check_xflag a 1 + _check_xflag a/b 1 + _check_xflag a/b/c 1 + _check_xflag a/b/c/d 1 + + rm -rf a +} + +# If a/ is +x and b/ is -x, check that: +# 1) b's new children inherit -x from b/. +# 2) a's new children(b/ is old) inherit +x from a/. +test_xflag_inheritance2() +{ + mkdir -p a/b + $XFS_IO_PROG -c "chattr +x" a + mkdir -p a/b/c a/d + touch a/b/c/e a/d/f + + _check_xflag a 1 + _check_xflag a/b 0 + _check_xflag a/b/c 0 + _check_xflag a/b/c/e 0 + _check_xflag a/d 1 + _check_xflag a/d/f 1 + + rm -rf a +} + +# If a/ is -x and b/ is +x, check that: +# 1) b's new children inherit +x from b/. +# 2) a's new children(b/ is old) inherit -x from a/. +test_xflag_inheritance3() +{ + mkdir -p a/b + $XFS_IO_PROG -c "chattr +x" a/b + mkdir -p a/b/c a/d + touch a/b/c/e a/d/f + + _check_xflag a 0 + _check_xflag a/b 1 + _check_xflag a/b/c 1 + _check_xflag a/b/c/e 1 + _check_xflag a/d 0 + _check_xflag a/d/f 0 + + rm -rf a +} + +# If a/, c/ are +x and b/ is -x, check that: +# 1) c's new children inherit +x from c/. +# 2) b's new children(c/ is old) inherit -x from b/. +test_xflag_inheritance4() +{ + mkdir -p a + $XFS_IO_PROG -c "chattr +x" a + mkdir -p a/b/c + $XFS_IO_PROG -c "chattr -x" a/b + mkdir -p a/b/c/d a/b/e + touch a/b/c/d/f a/b/e/g + + _check_xflag a 1 + _check_xflag a/b 0 + _check_xflag a/b/c 1 + _check_xflag a/b/c/d 1 + _check_xflag a/b/c/d/f 1 + _check_xflag a/b/e 0 + _check_xflag a/b/e/g 0 + + rm -rf a +} + +# If a/ is +x and b/ is -x, check that: +# 1) new b/c and b/g inherit -x from b/ by cp. +# 2) new a/e inherits +x from a/ by cp. +# 3) new b/d preserves +x from a/ by mv. +# 4) new a/f and a/h preserve -x from b/ by mv. +test_xflag_inheritance5() +{ + mkdir -p a b + $XFS_IO_PROG -c "chattr +x" a + mkdir -p a/c a/d b/e b/f + touch a/g b/h + + cp -r a/c b/ + cp -r b/e a/ + cp -r a/g b/ + mv a/d b/ + mv b/f a/ + mv b/h a/ + + _check_xflag b/c 0 + _check_xflag b/d 1 + _check_xflag a/e 1 + _check_xflag a/f 0 + _check_xflag b/g 0 + _check_xflag a/h 0 + + rm -rf a b +} + +do_xflag_tests() +{ + local option=$1 + + _scratch_mount "$option" + cd $SCRATCH_MNT + + for i in $(seq 1 5); do + test_xflag_inheritance${i} + done + + cd - > /dev/null + _scratch_unmount +} + +do_tests() +{ + _scratch_mkfs >> $seqres.full 2>&1 + + # Mount without dax option + export MOUNT_OPTIONS="" + do_xflag_tests + + # Mount with 'dax' or 'dax=always' option if fs supports it. + _check_scratch_dax_mountopt "dax" && do_xflag_tests "-o dax" + + # Mount with 'dax=inode' and 'dax=never' options if fs supports them. + if _check_scratch_dax_mountopt "dax=always"; then + for dax_option in "dax=inode" "dax=never"; do + do_xflag_tests "-o $dax_option" + done + fi +} + +do_tests + +# success, all done +echo "Silence is golden" +status=0 +exit diff --git a/tests/generic/607.out b/tests/generic/607.out new file mode 100644 index 00000000..d02de53b --- /dev/null +++ b/tests/generic/607.out @@ -0,0 +1,2 @@ +QA output created by 607 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index 05c6b02d..5bd289c3 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -609,3 +609,4 @@ 604 auto quick mount 605 auto attr quick dax 606 auto attr quick dax +607 auto attr quick dax From patchwork Thu Aug 6 02:13:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Yang X-Patchwork-Id: 11702687 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6992D138C for ; Thu, 6 Aug 2020 02:21:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 609BC2245C for ; Thu, 6 Aug 2020 02:21:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726013AbgHFCVe (ORCPT ); Wed, 5 Aug 2020 22:21:34 -0400 Received: from mail.cn.fujitsu.com ([183.91.158.132]:34557 "EHLO heian.cn.fujitsu.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726005AbgHFCVd (ORCPT ); Wed, 5 Aug 2020 22:21:33 -0400 X-IronPort-AV: E=Sophos;i="5.75,440,1589212800"; d="scan'208";a="97677610" Received: from unknown (HELO cn.fujitsu.com) ([10.167.33.5]) by heian.cn.fujitsu.com with ESMTP; 06 Aug 2020 10:21:19 +0800 Received: from G08CNEXMBPEKD04.g08.fujitsu.local (unknown [10.167.33.201]) by cn.fujitsu.com (Postfix) with ESMTP id 357F84CE34FC; Thu, 6 Aug 2020 10:21:18 +0800 (CST) Received: from G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.203) by G08CNEXMBPEKD04.g08.fujitsu.local (10.167.33.201) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 6 Aug 2020 10:21:19 +0800 Received: from Fedora-30.g08.fujitsu.local (10.167.220.106) by G08CNEXCHPEKD05.g08.fujitsu.local (10.167.33.209) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Thu, 6 Aug 2020 10:21:18 +0800 From: Xiao Yang To: CC: , , , Xiao Yang Subject: [PATCH v9 8/8] generic: Verify how to change the S_DAX flag on an existing file Date: Thu, 6 Aug 2020 10:13:42 +0800 Message-ID: <20200806021342.10596-9-yangx.jy@cn.fujitsu.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> References: <20200806021342.10596-1-yangx.jy@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: 357F84CE34FC.ACA82 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: yangx.jy@cn.fujitsu.com X-Spam-Status: No Sender: fstests-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org Change FS_XFLAG_DAX on an existing file and check if S_DAX on the file can take effect immediately by the following steps: 1) Stop all applications which are using the file. 2) Do drop_caches or umount & mount cycle. Signed-off-by: Xiao Yang Reviewed-by: Darrick J. Wong --- tests/generic/608 | 121 ++++++++++++++++++++++++++++++++++++++++++ tests/generic/608.out | 2 + tests/generic/group | 1 + 3 files changed, 124 insertions(+) create mode 100644 tests/generic/608 create mode 100644 tests/generic/608.out diff --git a/tests/generic/608 b/tests/generic/608 new file mode 100644 index 00000000..a06fc016 --- /dev/null +++ b/tests/generic/608 @@ -0,0 +1,121 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2020 Fujitsu. All Rights Reserved. +# +# FS QA Test 608 +# Change FS_XFLAG_DAX on an existing file and check if S_DAX on +# the file can take effect immediately by the following steps: +# 1) Stop all applications which are using the file. +# 2) Do drop_caches or umount & mount cycle. + +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter + +# remove previous $seqres.full before test +rm -f $seqres.full + +_supported_fs generic +_supported_os Linux +_require_scratch_dax_mountopt "dax=always" +_require_dax_iflag +_require_xfs_io_command "lsattr" "-v" +_require_xfs_io_command "statx" "-r" + +test_drop_caches() +{ + local t_file=$SCRATCH_MNT/testfile + + rm -f $t_file + touch $t_file + _check_xflag $t_file 0 + _check_s_dax $t_file 0 + + exec 3< $t_file + + $XFS_IO_PROG -c 'chattr +x' $t_file + _check_xflag $t_file 1 + _check_s_dax $t_file 0 + + # One application is using test file and check if S_DAX on + # the file doesn't take effect immediately by drop_caches + echo 2 > /proc/sys/vm/drop_caches + _check_s_dax $t_file 0 + + exec 3<&- + + # No application is using test file and check if S_DAX on + # the file takes effect immediately by drop_caches + echo 2 > /proc/sys/vm/drop_caches + _check_s_dax $t_file 1 +} + +test_cycle_mount() +{ + local option=$1 + local t_dir=$SCRATCH_MNT/testdir + local t_file=$t_dir/testfile + + mkdir -p $t_dir + $XFS_IO_PROG -c 'chattr +x' $t_dir + rm -f $t_file + touch $t_file + _check_xflag $t_file 1 + _check_s_dax $t_file 1 + + exec 3< $t_file + + $XFS_IO_PROG -c 'chattr -x' $t_file + _check_xflag $t_file 0 + _check_s_dax $t_file 1 + + exec 3<&- + + # No application is using test file and check if S_DAX on + # the file takes effect immediately by umount & mount + _scratch_cycle_mount "$option" + _check_s_dax $t_file 0 +} + +do_tests() +{ + local mount_option=$1 + local cycle_mount_option=$2 + + _scratch_mount "$mount_option" + + test_drop_caches + + test_cycle_mount "$cycle_mount_option" + + _scratch_unmount +} + +_scratch_mkfs >> $seqres.full 2>&1 + +# Mount with dax option +do_tests "-o dax=inode" "dax=inode" + +# Mount without dax option +export MOUNT_OPTIONS="" +do_tests + +# success, all done +echo "Silence is golden" +status=0 +exit diff --git a/tests/generic/608.out b/tests/generic/608.out new file mode 100644 index 00000000..1e534458 --- /dev/null +++ b/tests/generic/608.out @@ -0,0 +1,2 @@ +QA output created by 608 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index 5bd289c3..aa969bcb 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -610,3 +610,4 @@ 605 auto attr quick dax 606 auto attr quick dax 607 auto attr quick dax +608 auto attr quick dax