All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/2] generic: soft quota limits testing within grace time
@ 2022-05-12 18:22 Zorro Lang
  2022-05-12 18:22 ` [PATCH v3 2/2] generic/603: use project quota create and restore common helpers Zorro Lang
  2022-05-12 19:06 ` [PATCH v3 1/2] generic: soft quota limits testing within grace time Darrick J. Wong
  0 siblings, 2 replies; 7+ messages in thread
From: Zorro Lang @ 2022-05-12 18:22 UTC (permalink / raw)
  To: fstests; +Cc: djwong

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 <zlang@redhat.com>
---

According to the review points of:
  https://lore.kernel.org/fstests/20220511163806.uc4z7td2remhdru3@zlang-mailbox/T/#m23940b47261165a0442c7ae1eb4d96a1489a2935
V3 did below changes:
1) fix some comments description
2) add a few hard limit test
3) And bring in [PATCH 2/2], to help g/603 to use the common functions of this
   patch.

Thanks,
Zorro

 common/quota          | 48 +++++++++++++++++++++
 tests/generic/999     | 99 +++++++++++++++++++++++++++++++++++++++++++
 tests/generic/999.out |  2 +
 3 files changed, 149 insertions(+)
 create mode 100755 tests/generic/999
 create mode 100644 tests/generic/999.out

diff --git a/common/quota b/common/quota
index 7fa1a61a..67698f74 100644
--- a/common/quota
+++ b/common/quota
@@ -351,5 +351,53 @@ _qsetup()
 	echo "Using type=$type id=$id" >> $seqres.full
 }
 
+# Help to create project quota on directory, works for xfs and other fs.
+# Usage: _create_project_quota <dirname> <projid> [name]
+# Although the [name] is optional, better to specify it if need a fixed name.
+_create_project_quota()
+{
+	local prjdir=$1
+	local id=$2
+	local name=$3
+
+	if [ -z "$name" ];then
+		name=`echo $projdir | tr \/ \_`
+	fi
+
+	rm -rf $prjdir
+	mkdir $prjdir
+	chmod ugo+rwx $prjdir
+
+	if [ -f /etc/projects -a ! -f $tmp.projects.bk ];then
+		cat /etc/projects > $tmp.projects.bk
+		echo >/etc/projects
+	fi
+	if [ -f /etc/projid -a ! -f $tmp.projid.bk ];then
+		cat /etc/projid > $tmp.projid.bk
+		echo >/etc/projid
+	fi
+
+	cat >>/etc/projects <<EOF
+$id:$prjdir
+EOF
+	cat >>/etc/projid <<EOF
+$name:$id
+EOF
+	$XFS_IO_PROG -r -c "chproj $id" -c "chattr +P" $prjdir
+}
+
+# If you've called _create_project_quota, then use this function in _cleanup
+_restore_project_quota()
+{
+	if [ -f $tmp.projects.bk ];then
+		cat $tmp.projects.bk > /etc/projects && \
+			rm -f $tmp.projects.bk
+	fi
+	if [ -f $tmp.projid.bk ];then
+		cat $tmp.projid.bk > /etc/projid && \
+			rm -f $tmp.projid.bk
+	fi
+}
+
 # make sure this script returns success
 /bin/true
diff --git a/tests/generic/999 b/tests/generic/999
new file mode 100755
index 00000000..76d68df5
--- /dev/null
+++ b/tests/generic/999
@@ -0,0 +1,99 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2022 Red Hat Inc.  All Rights Reserved.
+#
+# FS QA Test No. 999
+#
+# 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 tries 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 some day, this case
+# might help to detect that too.
+#
+. ./common/preamble
+_begin_fstest auto quota
+
+# Override the default cleanup function.
+_cleanup()
+{
+	_restore_project_quota
+	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
+
+# 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_quota $SCRATCH_MNT/t 100 $qa_user
+		file=$SCRATCH_MNT/t/testfile
+	fi
+
+	setquota -${type} $qa_user 1M 200M 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 each write 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
+			echo "Unexpected error (type=$type)!"
+			break
+		fi
+	done
+	repquota -v -${type} $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1
+
+	# As we've tested soft limit, now exceed the hard limit and give it a
+	# test in passing.
+	su $qa_user -c "$XFS_IO_PROG -f -t -c 'pwrite 0 100m' -c fsync ${file}.hard.0" >>$seqres.full 2>&1
+	for ((i=1; i<=10; i++));do
+		su "$qa_user" -c "$XFS_IO_PROG -f -c 'pwrite 0 1m' -c fsync ${file}.hard.$i" >>$seqres.full 2>&1
+		if [ $? -eq 0 ];then
+			echo "Unexpected success (type=$type)!"
+			break
+		fi
+	done
+}
+
+_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/999.out b/tests/generic/999.out
new file mode 100644
index 00000000..3b276ca8
--- /dev/null
+++ b/tests/generic/999.out
@@ -0,0 +1,2 @@
+QA output created by 999
+Silence is golden
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v3 2/2] generic/603: use project quota create and restore common helpers
  2022-05-12 18:22 [PATCH v3 1/2] generic: soft quota limits testing within grace time Zorro Lang
@ 2022-05-12 18:22 ` Zorro Lang
  2022-05-12 19:07   ` Darrick J. Wong
  2022-05-12 19:06 ` [PATCH v3 1/2] generic: soft quota limits testing within grace time Darrick J. Wong
  1 sibling, 1 reply; 7+ messages in thread
From: Zorro Lang @ 2022-05-12 18:22 UTC (permalink / raw)
  To: fstests; +Cc: djwong

As common/quota has _create_project_quota and _restore_project_quota
helpers now, so replace local similar functions with them.

Signed-off-by: Zorro Lang <zlang@kernel.org>
---
 tests/generic/603 | 36 ++----------------------------------
 1 file changed, 2 insertions(+), 34 deletions(-)

diff --git a/tests/generic/603 b/tests/generic/603
index b362a3d0..08ddcbf2 100755
--- a/tests/generic/603
+++ b/tests/generic/603
@@ -13,7 +13,7 @@ _begin_fstest auto quick quota
 # Override the default cleanup function.
 _cleanup()
 {
-	restore_project
+	_restore_project_quota
 	cd /
 	rm -f $tmp.*
 }
@@ -22,38 +22,6 @@ _cleanup()
 . ./common/filter
 . ./common/quota
 
-require_project()
-{
-	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 <<EOF
-100:$SCRATCH_MNT/t
-EOF
-	cat >/etc/projid <<EOF
-$qa_user:100
-EOF
-	PROJECT_CHANGED=1
-}
-
-restore_project()
-{
-	if [ "$PROJECT_CHANGED" = "1" ];then
-		rm -f /etc/projects /etc/projid
-		if [ -f $tmp.projects ];then
-			cat $tmp.projects > /etc/projects
-		fi
-		if [ -f $tmp.projid ];then
-			cat $tmp.projid > /etc/projid
-		fi
-	fi
-}
-
 init_files()
 {
 	local dir=$1
@@ -157,7 +125,7 @@ BLOCK_SIZE=$(_get_file_block_size $SCRATCH_MNT)
 rm -rf $SCRATCH_MNT/t
 mkdir $SCRATCH_MNT/t
 $XFS_IO_PROG -r -c "chproj 100" -c "chattr +P" $SCRATCH_MNT/t
-require_project
+_create_project_quota $SCRATCH_MNT/t 100 $qa_user
 
 echo "### Set up different grace timers to each type of quota"
 UBGRACE=12
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/2] generic: soft quota limits testing within grace time
  2022-05-12 18:22 [PATCH v3 1/2] generic: soft quota limits testing within grace time Zorro Lang
  2022-05-12 18:22 ` [PATCH v3 2/2] generic/603: use project quota create and restore common helpers Zorro Lang
@ 2022-05-12 19:06 ` Darrick J. Wong
  2022-05-12 20:16   ` Zorro Lang
  1 sibling, 1 reply; 7+ messages in thread
From: Darrick J. Wong @ 2022-05-12 19:06 UTC (permalink / raw)
  To: Zorro Lang; +Cc: fstests

On Fri, May 13, 2022 at 02:22:02AM +0800, Zorro Lang wrote:
> 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 <zlang@redhat.com>
> ---
> 
> According to the review points of:
>   https://lore.kernel.org/fstests/20220511163806.uc4z7td2remhdru3@zlang-mailbox/T/#m23940b47261165a0442c7ae1eb4d96a1489a2935
> V3 did below changes:
> 1) fix some comments description
> 2) add a few hard limit test
> 3) And bring in [PATCH 2/2], to help g/603 to use the common functions of this
>    patch.
> 
> Thanks,
> Zorro
> 
>  common/quota          | 48 +++++++++++++++++++++
>  tests/generic/999     | 99 +++++++++++++++++++++++++++++++++++++++++++
>  tests/generic/999.out |  2 +
>  3 files changed, 149 insertions(+)
>  create mode 100755 tests/generic/999
>  create mode 100644 tests/generic/999.out
> 
> diff --git a/common/quota b/common/quota
> index 7fa1a61a..67698f74 100644
> --- a/common/quota
> +++ b/common/quota
> @@ -351,5 +351,53 @@ _qsetup()
>  	echo "Using type=$type id=$id" >> $seqres.full
>  }
>  
> +# Help to create project quota on directory, works for xfs and other fs.
> +# Usage: _create_project_quota <dirname> <projid> [name]
> +# Although the [name] is optional, better to specify it if need a fixed name.
> +_create_project_quota()
> +{
> +	local prjdir=$1
> +	local id=$2
> +	local name=$3
> +
> +	if [ -z "$name" ];then
> +		name=`echo $projdir | tr \/ \_`
> +	fi
> +
> +	rm -rf $prjdir
> +	mkdir $prjdir
> +	chmod ugo+rwx $prjdir
> +
> +	if [ -f /etc/projects -a ! -f $tmp.projects.bk ];then
> +		cat /etc/projects > $tmp.projects.bk
> +		echo >/etc/projects
> +	fi
> +	if [ -f /etc/projid -a ! -f $tmp.projid.bk ];then
> +		cat /etc/projid > $tmp.projid.bk
> +		echo >/etc/projid
> +	fi
> +
> +	cat >>/etc/projects <<EOF
> +$id:$prjdir
> +EOF
> +	cat >>/etc/projid <<EOF
> +$name:$id
> +EOF
> +	$XFS_IO_PROG -r -c "chproj $id" -c "chattr +P" $prjdir
> +}
> +
> +# If you've called _create_project_quota, then use this function in _cleanup
> +_restore_project_quota()
> +{
> +	if [ -f $tmp.projects.bk ];then
> +		cat $tmp.projects.bk > /etc/projects && \
> +			rm -f $tmp.projects.bk
> +	fi
> +	if [ -f $tmp.projid.bk ];then
> +		cat $tmp.projid.bk > /etc/projid && \
> +			rm -f $tmp.projid.bk
> +	fi
> +}
> +
>  # make sure this script returns success
>  /bin/true
> diff --git a/tests/generic/999 b/tests/generic/999
> new file mode 100755
> index 00000000..76d68df5
> --- /dev/null
> +++ b/tests/generic/999
> @@ -0,0 +1,99 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2022 Red Hat Inc.  All Rights Reserved.
> +#
> +# FS QA Test No. 999
> +#
> +# 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 tries 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 some day, this case
> +# might help to detect that too.
> +#
> +. ./common/preamble
> +_begin_fstest auto quota
> +
> +# Override the default cleanup function.
> +_cleanup()
> +{
> +	_restore_project_quota
> +	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
> +
> +# 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_quota $SCRATCH_MNT/t 100 $qa_user
> +		file=$SCRATCH_MNT/t/testfile
> +	fi
> +
> +	setquota -${type} $qa_user 1M 200M 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 each write 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

Hmm -- if pwrite or fsync hit an error, shouldn't we let that end up in
999.out so that the golden output diff fails?

> +		if [ $? -ne 0 ];then
> +			echo "Unexpected error (type=$type)!"
> +			break
> +		fi
> +	done
> +	repquota -v -${type} $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1
> +
> +	# As we've tested soft limit, now exceed the hard limit and give it a
> +	# test in passing.
> +	su $qa_user -c "$XFS_IO_PROG -f -t -c 'pwrite 0 100m' -c fsync ${file}.hard.0" >>$seqres.full 2>&1
> +	for ((i=1; i<=10; i++));do
> +		su "$qa_user" -c "$XFS_IO_PROG -f -c 'pwrite 0 1m' -c fsync ${file}.hard.$i" >>$seqres.full 2>&1

Don't we want to encode the actual error in the golden output?

--D

> +		if [ $? -eq 0 ];then
> +			echo "Unexpected success (type=$type)!"
> +			break
> +		fi
> +	done
> +}
> +
> +_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/999.out b/tests/generic/999.out
> new file mode 100644
> index 00000000..3b276ca8
> --- /dev/null
> +++ b/tests/generic/999.out
> @@ -0,0 +1,2 @@
> +QA output created by 999
> +Silence is golden
> -- 
> 2.31.1
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 2/2] generic/603: use project quota create and restore common helpers
  2022-05-12 18:22 ` [PATCH v3 2/2] generic/603: use project quota create and restore common helpers Zorro Lang
@ 2022-05-12 19:07   ` Darrick J. Wong
  0 siblings, 0 replies; 7+ messages in thread
From: Darrick J. Wong @ 2022-05-12 19:07 UTC (permalink / raw)
  To: Zorro Lang; +Cc: fstests

On Fri, May 13, 2022 at 02:22:03AM +0800, Zorro Lang wrote:
> As common/quota has _create_project_quota and _restore_project_quota
> helpers now, so replace local similar functions with them.
> 
> Signed-off-by: Zorro Lang <zlang@kernel.org>

LGTM
Reviewed-by: Darrick J. Wong <djwong@kernel.org>

--D

> ---
>  tests/generic/603 | 36 ++----------------------------------
>  1 file changed, 2 insertions(+), 34 deletions(-)
> 
> diff --git a/tests/generic/603 b/tests/generic/603
> index b362a3d0..08ddcbf2 100755
> --- a/tests/generic/603
> +++ b/tests/generic/603
> @@ -13,7 +13,7 @@ _begin_fstest auto quick quota
>  # Override the default cleanup function.
>  _cleanup()
>  {
> -	restore_project
> +	_restore_project_quota
>  	cd /
>  	rm -f $tmp.*
>  }
> @@ -22,38 +22,6 @@ _cleanup()
>  . ./common/filter
>  . ./common/quota
>  
> -require_project()
> -{
> -	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 <<EOF
> -100:$SCRATCH_MNT/t
> -EOF
> -	cat >/etc/projid <<EOF
> -$qa_user:100
> -EOF
> -	PROJECT_CHANGED=1
> -}
> -
> -restore_project()
> -{
> -	if [ "$PROJECT_CHANGED" = "1" ];then
> -		rm -f /etc/projects /etc/projid
> -		if [ -f $tmp.projects ];then
> -			cat $tmp.projects > /etc/projects
> -		fi
> -		if [ -f $tmp.projid ];then
> -			cat $tmp.projid > /etc/projid
> -		fi
> -	fi
> -}
> -
>  init_files()
>  {
>  	local dir=$1
> @@ -157,7 +125,7 @@ BLOCK_SIZE=$(_get_file_block_size $SCRATCH_MNT)
>  rm -rf $SCRATCH_MNT/t
>  mkdir $SCRATCH_MNT/t
>  $XFS_IO_PROG -r -c "chproj 100" -c "chattr +P" $SCRATCH_MNT/t
> -require_project
> +_create_project_quota $SCRATCH_MNT/t 100 $qa_user
>  
>  echo "### Set up different grace timers to each type of quota"
>  UBGRACE=12
> -- 
> 2.31.1
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/2] generic: soft quota limits testing within grace time
  2022-05-12 19:06 ` [PATCH v3 1/2] generic: soft quota limits testing within grace time Darrick J. Wong
@ 2022-05-12 20:16   ` Zorro Lang
  2022-05-13  0:58     ` Darrick J. Wong
  0 siblings, 1 reply; 7+ messages in thread
From: Zorro Lang @ 2022-05-12 20:16 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: fstests

On Thu, May 12, 2022 at 12:06:47PM -0700, Darrick J. Wong wrote:
> On Fri, May 13, 2022 at 02:22:02AM +0800, Zorro Lang wrote:
> > 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 <zlang@redhat.com>
> > ---
> > 
> > According to the review points of:
> >   https://lore.kernel.org/fstests/20220511163806.uc4z7td2remhdru3@zlang-mailbox/T/#m23940b47261165a0442c7ae1eb4d96a1489a2935
> > V3 did below changes:
> > 1) fix some comments description
> > 2) add a few hard limit test
> > 3) And bring in [PATCH 2/2], to help g/603 to use the common functions of this
> >    patch.
> > 
> > Thanks,
> > Zorro
> > 
> >  common/quota          | 48 +++++++++++++++++++++
> >  tests/generic/999     | 99 +++++++++++++++++++++++++++++++++++++++++++
> >  tests/generic/999.out |  2 +
> >  3 files changed, 149 insertions(+)
> >  create mode 100755 tests/generic/999
> >  create mode 100644 tests/generic/999.out
> > 

[snip]

> > +
> > +	setquota -${type} $qa_user 1M 200M 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 each write 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
> 
> Hmm -- if pwrite or fsync hit an error, shouldn't we let that end up in
> 999.out so that the golden output diff fails?

Sure, will remove the "2>&1".

> 
> > +		if [ $? -ne 0 ];then
> > +			echo "Unexpected error (type=$type)!"
> > +			break
> > +		fi
> > +	done
> > +	repquota -v -${type} $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1
> > +
> > +	# As we've tested soft limit, now exceed the hard limit and give it a
> > +	# test in passing.
> > +	su $qa_user -c "$XFS_IO_PROG -f -t -c 'pwrite 0 100m' -c fsync ${file}.hard.0" >>$seqres.full 2>&1
> > +	for ((i=1; i<=10; i++));do
> > +		su "$qa_user" -c "$XFS_IO_PROG -f -c 'pwrite 0 1m' -c fsync ${file}.hard.$i" >>$seqres.full 2>&1
> 
> Don't we want to encode the actual error in the golden output?

Hmm... due to I have to filter the ENOSPC or EDQUOT output again for project
quota, as I did in generic/603 :-P Or put the that function into common/quota
too.

Thanks,
Zorro

> 
> --D
> 
> > +		if [ $? -eq 0 ];then
> > +			echo "Unexpected success (type=$type)!"
> > +			break
> > +		fi
> > +	done
> > +}
> > +
> > +_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/999.out b/tests/generic/999.out
> > new file mode 100644
> > index 00000000..3b276ca8
> > --- /dev/null
> > +++ b/tests/generic/999.out
> > @@ -0,0 +1,2 @@
> > +QA output created by 999
> > +Silence is golden
> > -- 
> > 2.31.1
> > 
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/2] generic: soft quota limits testing within grace time
  2022-05-12 20:16   ` Zorro Lang
@ 2022-05-13  0:58     ` Darrick J. Wong
  2022-05-13  5:09       ` Zorro Lang
  0 siblings, 1 reply; 7+ messages in thread
From: Darrick J. Wong @ 2022-05-13  0:58 UTC (permalink / raw)
  To: fstests

On Fri, May 13, 2022 at 04:16:51AM +0800, Zorro Lang wrote:
> On Thu, May 12, 2022 at 12:06:47PM -0700, Darrick J. Wong wrote:
> > On Fri, May 13, 2022 at 02:22:02AM +0800, Zorro Lang wrote:
> > > 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 <zlang@redhat.com>
> > > ---
> > > 
> > > According to the review points of:
> > >   https://lore.kernel.org/fstests/20220511163806.uc4z7td2remhdru3@zlang-mailbox/T/#m23940b47261165a0442c7ae1eb4d96a1489a2935
> > > V3 did below changes:
> > > 1) fix some comments description
> > > 2) add a few hard limit test
> > > 3) And bring in [PATCH 2/2], to help g/603 to use the common functions of this
> > >    patch.
> > > 
> > > Thanks,
> > > Zorro
> > > 
> > >  common/quota          | 48 +++++++++++++++++++++
> > >  tests/generic/999     | 99 +++++++++++++++++++++++++++++++++++++++++++
> > >  tests/generic/999.out |  2 +
> > >  3 files changed, 149 insertions(+)
> > >  create mode 100755 tests/generic/999
> > >  create mode 100644 tests/generic/999.out
> > > 
> 
> [snip]
> 
> > > +
> > > +	setquota -${type} $qa_user 1M 200M 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 each write 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
> > 
> > Hmm -- if pwrite or fsync hit an error, shouldn't we let that end up in
> > 999.out so that the golden output diff fails?
> 
> Sure, will remove the "2>&1".
> 
> > 
> > > +		if [ $? -ne 0 ];then
> > > +			echo "Unexpected error (type=$type)!"
> > > +			break
> > > +		fi
> > > +	done
> > > +	repquota -v -${type} $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1
> > > +
> > > +	# As we've tested soft limit, now exceed the hard limit and give it a
> > > +	# test in passing.
> > > +	su $qa_user -c "$XFS_IO_PROG -f -t -c 'pwrite 0 100m' -c fsync ${file}.hard.0" >>$seqres.full 2>&1
> > > +	for ((i=1; i<=10; i++));do
> > > +		su "$qa_user" -c "$XFS_IO_PROG -f -c 'pwrite 0 1m' -c fsync ${file}.hard.$i" >>$seqres.full 2>&1
> > 
> > Don't we want to encode the actual error in the golden output?
> 
> Hmm... due to I have to filter the ENOSPC or EDQUOT output again for project
> quota, as I did in generic/603 :-P Or put the that function into common/quota
> too.

I think it'd be fine if the golden output contained:

pwrite: Insufficient quota
pwrite: Insufficient quota
pwrite: Not enough space

for each of the user/group/project quota tests.  Or did I misunderstand?

--D

> Thanks,
> Zorro
> 
> > 
> > --D
> > 
> > > +		if [ $? -eq 0 ];then
> > > +			echo "Unexpected success (type=$type)!"
> > > +			break
> > > +		fi
> > > +	done
> > > +}
> > > +
> > > +_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/999.out b/tests/generic/999.out
> > > new file mode 100644
> > > index 00000000..3b276ca8
> > > --- /dev/null
> > > +++ b/tests/generic/999.out
> > > @@ -0,0 +1,2 @@
> > > +QA output created by 999
> > > +Silence is golden
> > > -- 
> > > 2.31.1
> > > 
> > 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/2] generic: soft quota limits testing within grace time
  2022-05-13  0:58     ` Darrick J. Wong
@ 2022-05-13  5:09       ` Zorro Lang
  0 siblings, 0 replies; 7+ messages in thread
From: Zorro Lang @ 2022-05-13  5:09 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: fstests

On Thu, May 12, 2022 at 05:58:14PM -0700, Darrick J. Wong wrote:
> On Fri, May 13, 2022 at 04:16:51AM +0800, Zorro Lang wrote:
> > On Thu, May 12, 2022 at 12:06:47PM -0700, Darrick J. Wong wrote:
> > > On Fri, May 13, 2022 at 02:22:02AM +0800, Zorro Lang wrote:
> > > > 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 <zlang@redhat.com>
> > > > ---
> > > > 
> > > > According to the review points of:
> > > >   https://lore.kernel.org/fstests/20220511163806.uc4z7td2remhdru3@zlang-mailbox/T/#m23940b47261165a0442c7ae1eb4d96a1489a2935
> > > > V3 did below changes:
> > > > 1) fix some comments description
> > > > 2) add a few hard limit test
> > > > 3) And bring in [PATCH 2/2], to help g/603 to use the common functions of this
> > > >    patch.
> > > > 
> > > > Thanks,
> > > > Zorro
> > > > 
> > > >  common/quota          | 48 +++++++++++++++++++++
> > > >  tests/generic/999     | 99 +++++++++++++++++++++++++++++++++++++++++++
> > > >  tests/generic/999.out |  2 +
> > > >  3 files changed, 149 insertions(+)
> > > >  create mode 100755 tests/generic/999
> > > >  create mode 100644 tests/generic/999.out
> > > > 
> > 
> > [snip]
> > 
> > > > +
> > > > +	setquota -${type} $qa_user 1M 200M 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 each write 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
> > > 
> > > Hmm -- if pwrite or fsync hit an error, shouldn't we let that end up in
> > > 999.out so that the golden output diff fails?
> > 
> > Sure, will remove the "2>&1".
> > 
> > > 
> > > > +		if [ $? -ne 0 ];then
> > > > +			echo "Unexpected error (type=$type)!"
> > > > +			break
> > > > +		fi
> > > > +	done
> > > > +	repquota -v -${type} $SCRATCH_MNT | grep -v "^root" >>$seqres.full 2>&1
> > > > +
> > > > +	# As we've tested soft limit, now exceed the hard limit and give it a
> > > > +	# test in passing.
> > > > +	su $qa_user -c "$XFS_IO_PROG -f -t -c 'pwrite 0 100m' -c fsync ${file}.hard.0" >>$seqres.full 2>&1
> > > > +	for ((i=1; i<=10; i++));do
> > > > +		su "$qa_user" -c "$XFS_IO_PROG -f -c 'pwrite 0 1m' -c fsync ${file}.hard.$i" >>$seqres.full 2>&1
> > > 
> > > Don't we want to encode the actual error in the golden output?
> > 
> > Hmm... due to I have to filter the ENOSPC or EDQUOT output again for project
> > quota, as I did in generic/603 :-P Or put the that function into common/quota
> > too.
> 
> I think it'd be fine if the golden output contained:
> 
> pwrite: Insufficient quota
> pwrite: Insufficient quota
> pwrite: Not enough space

Sorry I didn't explain that clearly :)

When FSTYP=ext4, it got:
pwrite: Disk quota exceeded
pwrite: Disk quota exceeded
pwrite: Disk quota exceeded
...

When FSTYP=xfs, it got:
SCRATCH_MNT/testfile.hard.1: Disk quota exceeded
SCRATCH_MNT/testfile.hard.1: Disk quota exceeded
SCRATCH_MNT/t/testfile.hard.1: No space left on device
...

There're 2 differences:
1) ext4 fails on write -- "-c pwrite", but xfs fails on open(O_CREAT) -- "xfs_io -f"
2) For project quota, xfs returns ENOSPC, ext4 returns EDQUOT.

If these're all as expected, I need to filter these differences. And I don't
know what other filesystems will print, besides xfs and ext4.

Thanks,
Zorro

> 
> for each of the user/group/project quota tests.  Or did I misunderstand?
> 
> --D
> 
> > Thanks,
> > Zorro
> > 
> > > 
> > > --D
> > > 
> > > > +		if [ $? -eq 0 ];then
> > > > +			echo "Unexpected success (type=$type)!"
> > > > +			break
> > > > +		fi
> > > > +	done
> > > > +}
> > > > +
> > > > +_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/999.out b/tests/generic/999.out
> > > > new file mode 100644
> > > > index 00000000..3b276ca8
> > > > --- /dev/null
> > > > +++ b/tests/generic/999.out
> > > > @@ -0,0 +1,2 @@
> > > > +QA output created by 999
> > > > +Silence is golden
> > > > -- 
> > > > 2.31.1
> > > > 
> > > 
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-05-13  5:10 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-12 18:22 [PATCH v3 1/2] generic: soft quota limits testing within grace time Zorro Lang
2022-05-12 18:22 ` [PATCH v3 2/2] generic/603: use project quota create and restore common helpers Zorro Lang
2022-05-12 19:07   ` Darrick J. Wong
2022-05-12 19:06 ` [PATCH v3 1/2] generic: soft quota limits testing within grace time Darrick J. Wong
2022-05-12 20:16   ` Zorro Lang
2022-05-13  0:58     ` Darrick J. Wong
2022-05-13  5:09       ` Zorro Lang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.