X-Git-Url: http://git.apps.os.sepia.ceph.com/?p=xfstests-dev.git;a=blobdiff_plain;f=tests%2Fxfs%2F260;h=4956752cdb4e581940dc3095f96910fb77fcb53e;hp=a2bc3ce9805f872c2bd4214ce571066f5d40a978;hb=e28c4e69a4335cb747c0e80b5c25f00fe4fa297c;hpb=ee25b89d8c26b11aab95adbb3bc69d350d184f47 diff --git a/tests/xfs/260 b/tests/xfs/260 index a2bc3ce9..4956752c 100755 --- a/tests/xfs/260 +++ b/tests/xfs/260 @@ -1,33 +1,11 @@ #! /bin/bash -# FS QA Test 260 -# -# When default quota is set, all different quota types inherits the -# same default value, include group quota. So if a user quota limit -# larger than the default user quota value, it will still be limited -# by the group default quota value. -# -# There's a patch from Upstream can fix this bug: -# -# [PATCH] xfs: Split default quota limits by quota type V4 +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2017 Red Hat Inc. All Rights Reserved. # -#----------------------------------------------------------------------- -# Copyright (c) 2016 Red Hat, Inc. All Rights Reserved. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# FS QA Test 260 # -# You should have received a copy of the GNU General Public License -# along with this program; if not, write the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -#----------------------------------------------------------------------- +# Test per-inode DAX flag by mmap direct/buffered IO. # - seq=`basename $0` seqres=$RESULT_DIR/$seq echo "QA output created by $seq" @@ -46,75 +24,120 @@ _cleanup() # get standard environment, filters and checks . ./common/rc . ./common/filter -. ./common/quota # remove previous $seqres.full before test rm -f $seqres.full -# real QA test starts here -_supported_fs generic +_supported_fs xfs _supported_os Linux -_require_scratch -_require_quota -_require_xfs_quota_foreign -_require_user -_require_group +_require_scratch_dax +_require_test_program "feature" +_require_test_program "t_mmap_dio" +_require_xfs_io_command "chattr" "x" +_require_xfs_io_command "falloc" + +prep_files() +{ + rm -f $SCRATCH_MNT/tf_{s,d} + + $XFS_IO_PROG -f -c "falloc 0 $tsize" \ + $SCRATCH_MNT/tf_{s,d} >> $seqres.full 2>&1 +} + +t_both_dax() +{ + prep_files + $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_{s,d} + # with O_DIRECT first + src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} $1 "dio both dax" + + prep_files + $XFS_IO_PROG -c "chattr +x" $SCRATCH_MNT/tf_{s,d} + # again with buffered IO + src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \ + $1 "buffered both dax" +} + +t_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 + src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \ + $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 + src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \ + $1 "buffered nondax to dax" +} + +t_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 + src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \ + $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 + src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \ + $1 "buffered dax to nondax" +} -do_test() +t_both_nondax() { - local qname=$1 - local type - - if [ "$qname" = "user" ];then - type="-u" - echo "=== user quota test ===" - elif [ "$qname" = "group" ];then - type="-g" - echo "=== group quota test ===" - else - echo "wrong quota type name - $qname" - return 1 - fi - - $XFS_QUOTA_PROG -x -c "limit bsoft=20M bhard=20M isoft=20 ihard=20 $type -d" $SCRATCH_MNT - $XFS_QUOTA_PROG -x -c "limit bsoft=40M bhard=40M isoft=40 ihard=40 $type fsgqa" $SCRATCH_MNT - echo "$qname blocks and inode limit" - $XFS_QUOTA_PROG -x -c "report $type -N -bi" $SCRATCH_MNT | grep -v ^root | _filter_spaces - - ## blocks default quota test ## - _user_do "$XFS_IO_PROG -f -c \"pwrite 0 30M\" -c \"fsync\" $SCRATCH_MNT/data" | _filter_xfs_io - echo "$qname blocks quota after write 30M data" - $XFS_QUOTA_PROG -x -c "report $type -N -b" $SCRATCH_MNT | grep -v ^root | _filter_spaces - - rm -f ${SCRATCH_MNT}/* >/dev/null 2>&1 - - ## inode default quota test ## - for ((i=0; i<30; i++));do - _user_do "echo -n > ${SCRATCH_MNT}/file${i}" - done - sync - - echo "$qname inode quota after creating 30 inodes" - $XFS_QUOTA_PROG -x -c "report $type -N -i" $SCRATCH_MNT | grep -v ^root | _filter_spaces - - rm -f ${SCRATCH_MNT}/* >/dev/null 2>&1 + prep_files + $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d} + src/t_mmap_dio $SCRATCH_MNT/tf_{s,d} \ + $1 "dio both nondax" + + prep_files + $XFS_IO_PROG -c "chattr -x" $SCRATCH_MNT/tf_{s,d} + src/t_mmap_dio -b $SCRATCH_MNT/tf_{s,d} \ + $1 "buffered both nondax" } -### user default quota test ### -_scratch_mkfs >/dev/null 2>&1 -_qmount_option "usrquota,grpquota" -_qmount +# $1 mmap read/write size +t_dax_flag_mmap_dio() +{ + t_both_dax $1 + t_dax_to_nondax $1 + t_nondax_to_dax $1 + t_both_nondax $1 +} + +do_tests() +{ + # less than page size + t_dax_flag_mmap_dio 1024 + # page size + t_dax_flag_mmap_dio `src/feature -s` + # bigger sizes, for PMD faults + t_dax_flag_mmap_dio $((16 * 1024 * 1024)) + 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 + +# mount with dax option +_scratch_mount "-o dax" -do_test user +tsize=$((128 * 1024 * 1024)) -### group default quota test ### +do_tests _scratch_unmount -_scratch_mkfs >/dev/null 2>&1 -_qmount_option "grpquota,usrquota" -_qmount -do_test group +# mount again without dax option +export MOUNT_OPTIONS="" +_scratch_mount +do_tests # success, all done +echo "Silence is golden" status=0 exit