From patchwork Thu May 5 18:25:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zorro Lang X-Patchwork-Id: 12840011 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 703F2C433F5 for ; Thu, 5 May 2022 18:32:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352258AbiEESfs (ORCPT ); Thu, 5 May 2022 14:35:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1384855AbiEESes (ORCPT ); Thu, 5 May 2022 14:34:48 -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 25AA6689BE; Thu, 5 May 2022 11:26:02 -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 01034CE2CD7; Thu, 5 May 2022 18:26:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 776CCC385A8; Thu, 5 May 2022 18:25:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1651775158; bh=91neHGR006yQV+Y1BdhxuN5BzxWgxWi/7m7FxNIChF0=; h=From:To:Cc:Subject:Date:From; b=F6Sb6gb8+Z2KKFdkWgzUXaCjX+9l/yeyQ9etjSTh4SOeBD7FQjN3kt8cH0pm0xJK5 R+ZnUFrEiCYpEpr8LZP5jNkKASRMI0TrIkFUIn6R+OVhCAr6LIX8oGtV0HYWIjJc9D /b65valZMW0vUrM9e63vfAlwjcIiK+wfpR7WC3KbfBjzdFci+K0wuo7bejoQuk0VBU DEbNUU/WjOLAvT2+bRaluMTt4dxAX+QC6RRcn15TJBrJRNiJWctKYakkmLgJxP0qg7 30TA34m+hZHnmZufuMIifvM+W2wyX1fylvJecmERG9l+aS7lpdvumNIGZ8kxc+guZf WvQkxRNMcV+4w== From: Zorro Lang To: fstests@vger.kernel.org Cc: linux-xfs@vger.kernel.org Subject: [PATCH] generic: soft quota limits testing within grace time Date: Fri, 6 May 2022 02:25:55 +0800 Message-Id: <20220505182555.370074-1-zlang@kernel.org> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: fstests@vger.kernel.org After soft limits are exceeded, within the grace time, fs quota should allow more space allocation before exceeding hard limits, even if allocating many small files. This case can cover bc37e4fb5cac (xfs: revert "xfs: actually bump warning counts when we send warnings"). And will help to expose later behavior changes on this side. Signed-off-by: Zorro Lang --- tests/generic/690 | 125 ++++++++++++++++++++++++++++++++++++++++++ tests/generic/690.out | 2 + 2 files changed, 127 insertions(+) create mode 100755 tests/generic/690 create mode 100644 tests/generic/690.out diff --git a/tests/generic/690 b/tests/generic/690 new file mode 100755 index 00000000..b1d055dc --- /dev/null +++ b/tests/generic/690 @@ -0,0 +1,125 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2022 Red Hat Inc. All Rights Reserved. +# +# FS QA Test 690 +# +# Make sure filesystem quota works well, after soft limits are exceeded. The +# fs quota should allow more space allocation before exceeding hard limits +# and with in grace time. +# +# But different with other similar testing, this case trys to write many small +# files, to cover bc37e4fb5cac (xfs: revert "xfs: actually bump warning counts +# when we send warnings"). If there's a behavior change in one day, this case +# might help to detect that too. +# +. ./common/preamble +_begin_fstest auto quota + +# Override the default cleanup function. +_cleanup() +{ + restore_project + cd / + rm -r -f $tmp.* +} + +# Import common functions. +. ./common/quota + +# real QA test starts here +_supported_fs generic +_require_scratch +_require_quota +_require_user +_require_group + +create_project() +{ + rm -rf $SCRATCH_MNT/t + mkdir $SCRATCH_MNT/t + $XFS_IO_PROG -r -c "chproj 100" -c "chattr +P" $SCRATCH_MNT/t + chmod ugo+rwx $SCRATCH_MNT/t/ + + rm -f $tmp.projects $tmp.projid + if [ -f /etc/projects ];then + cat /etc/projects > $tmp.projects + fi + if [ -f /etc/projid ];then + cat /etc/projid > $tmp.projid + fi + + cat >/etc/projects </etc/projid < /etc/projects + fi + if [ -f $tmp.projid ];then + cat $tmp.projid > /etc/projid + fi + fi +} + +# Make sure the kernel supports project quota +_scratch_mkfs >$seqres.full 2>&1 +_scratch_enable_pquota +_qmount_option "prjquota" +_qmount +_require_prjquota $SCRATCH_DEV + +exercise() +{ + local type=$1 + local file=$SCRATCH_MNT/testfile + + echo "= Test type=$type quota =" >>$seqres.full + _scratch_unmount + _scratch_mkfs >>$seqres.full 2>&1 + if [ "$1" = "P" ];then + _scratch_enable_pquota + fi + _qmount + if [ "$1" = "P" ];then + create_project + file=$SCRATCH_MNT/t/testfile + fi + + setquota -${type} $qa_user 1M 500M 0 0 $SCRATCH_MNT + setquota -${type} -t 86400 86400 $SCRATCH_MNT + repquota -v -${type} $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 + # Exceed the soft quota limit a bit at first + su $qa_user -c "$XFS_IO_PROG -f -t -c 'pwrite 0 2m' -c fsync ${file}.0" >>$seqres.full 2>&1 + # Write more data more times under soft quota limit exhausted condition, + # but not reach hard limit. To make sure the it won't trigger EDQUOT. + for ((i=1; i<=100; i++));do + su "$qa_user" -c "$XFS_IO_PROG -f -c 'pwrite 0 1m' -c fsync ${file}.$i" >>$seqres.full 2>&1 + if [ $? -ne 0 ];then + log "Unexpected error (type=$type)!" + break + fi + done + repquota -v -${type} $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1 +} + +_qmount_option "usrquota" +exercise u +_qmount_option "grpquota" +exercise g +_qmount_option "prjquota" +exercise P + +echo "Silence is golden" +# success, all done +status=0 +exit diff --git a/tests/generic/690.out b/tests/generic/690.out new file mode 100644 index 00000000..6f3723e3 --- /dev/null +++ b/tests/generic/690.out @@ -0,0 +1,2 @@ +QA output created by 690 +Silence is golden