diff mbox

[4/7] reflink: fix space consumption tests

Message ID 148149319048.31093.2083894591825614863.stgit@birch.djwong.org (mailing list archive)
State New, archived
Headers show

Commit Message

Darrick J. Wong Dec. 11, 2016, 9:53 p.m. UTC
Some of the tests try to check that we can't COW when we're out of
space, but some tricky filesystems make this hard because writing N
blocks doesn't increase used blocks by N....

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 common/populate   |   14 ++++++++++++++
 tests/generic/171 |    5 ++---
 tests/generic/173 |    5 ++---
 tests/generic/174 |    5 ++---
 tests/generic/282 |    3 +--
 5 files changed, 21 insertions(+), 11 deletions(-)

Comments

Darrick J. Wong Dec. 12, 2016, 11:03 p.m. UTC | #1
On Mon, Dec 12, 2016 at 06:25:39PM +0800, Eryu Guan wrote:
> On Sun, Dec 11, 2016 at 01:53:10PM -0800, Darrick J. Wong wrote:
> > Some of the tests try to check that we can't COW when we're out of
> > space, but some tricky filesystems make this hard because writing N
> > blocks doesn't increase used blocks by N....
> > 
> > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> > ---
> >  common/populate   |   14 ++++++++++++++
> >  tests/generic/171 |    5 ++---
> >  tests/generic/173 |    5 ++---
> >  tests/generic/174 |    5 ++---
> >  tests/generic/282 |    3 +--
> >  5 files changed, 21 insertions(+), 11 deletions(-)
> > 
> > 
> > diff --git a/common/populate b/common/populate
> > index d0003c5..9811d21 100644
> > --- a/common/populate
> > +++ b/common/populate
> > @@ -30,6 +30,20 @@ _require_xfs_db_blocktrash_z_command() {
> >  	$XFS_DB_PROG -x -f -c 'blocktrash -z' "${TEST_DEV}" | grep -q 'nothing on stack' || _notrun "blocktrash -z not supported"
> >  }
> >  
> > +# Eat free space until we can't anymore.
> > +_consume_free_space() {
> > +	dir=$1
> > +
> > +	old_nr_free=0
> > +	nr_free=$(stat -f -c '%f' $dir)
> > +	x=0
> > +	while [ $nr_free -gt 0 ] && [ $old_nr_free != $nr_free ]; do
> > +		$XFS_IO_PROG -f -c "pwrite -b 4194304 0 $((blksz * nr_free))" $dir/eat_my_space.$((x++))
> 
> blksz not defined in the function.
> 
> Xiaoguang Wang did something similar back in Nov. and I'm still queuing
> his patch. (His 1/2 patch conflicts with your scrub/repair patchset and
> it might be easier for you to let your patches go first.)
> 
> generic: make 17[1-4] work well when btrfs compression is enabled
> https://patchwork.kernel.org/patch/9408451/
> 
> Does this patch work for you? If so, perhaps you only need to update
> generic/282 using the "_fill_fs" helper?

Aha!  I had this feeling in the back of my head that someone was
already trying to push a helper function.

At this point XFS online scrub/repair is slipping to 4.11 anyway so you
may as well take Xioguang's patches and I'll just rebase all my stuff
off of that.

--D

> 
> Thanks,
> Eryu
> --
> To unsubscribe from this list: send the line "unsubscribe fstests" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/common/populate b/common/populate
index d0003c5..9811d21 100644
--- a/common/populate
+++ b/common/populate
@@ -30,6 +30,20 @@  _require_xfs_db_blocktrash_z_command() {
 	$XFS_DB_PROG -x -f -c 'blocktrash -z' "${TEST_DEV}" | grep -q 'nothing on stack' || _notrun "blocktrash -z not supported"
 }
 
+# Eat free space until we can't anymore.
+_consume_free_space() {
+	dir=$1
+
+	old_nr_free=0
+	nr_free=$(stat -f -c '%f' $dir)
+	x=0
+	while [ $nr_free -gt 0 ] && [ $old_nr_free != $nr_free ]; do
+		$XFS_IO_PROG -f -c "pwrite -b 4194304 0 $((blksz * nr_free))" $dir/eat_my_space.$((x++))
+		old_nr_free=$nr_free
+		nr_free=$(stat -f -c '%f' $dir)
+	done
+}
+
 # Attempt to make files of "every" format for data, dirs, attrs etc.
 # (with apologies to Eric Sandeen for mutating xfser.sh)
 
diff --git a/tests/generic/171 b/tests/generic/171
index b01dbd5..d96fd17 100755
--- a/tests/generic/171
+++ b/tests/generic/171
@@ -41,6 +41,7 @@  _cleanup()
 . ./common/filter
 . ./common/attr
 . ./common/reflink
+. ./common/populate
 
 # real QA test starts here
 _supported_os Linux
@@ -75,9 +76,7 @@  _cp_reflink $testdir/bigfile $testdir/clonefile
 sync
 
 echo "Allocate the rest of the space"
-nr_free=$(stat -f -c '%f' $testdir)
-touch $testdir/file0 $testdir/file1
-_pwrite_byte 0x61 0 $((blksz * nr_free)) $testdir/eat_my_space >> $seqres.full 2>&1
+_consume_free_space $testdir >> $seqres.full 2>&1
 sync
 
 echo "CoW the big file"
diff --git a/tests/generic/173 b/tests/generic/173
index e35597f..20c6091 100755
--- a/tests/generic/173
+++ b/tests/generic/173
@@ -41,6 +41,7 @@  _cleanup()
 . ./common/filter
 . ./common/attr
 . ./common/reflink
+. ./common/populate
 
 # real QA test starts here
 _supported_os Linux
@@ -75,9 +76,7 @@  _cp_reflink $testdir/bigfile $testdir/clonefile
 sync
 
 echo "Allocate the rest of the space"
-nr_free=$(stat -f -c '%f' $testdir)
-touch $testdir/file0 $testdir/file1
-_pwrite_byte 0x61 0 $((blksz * nr_free)) $testdir/eat_my_space >> $seqres.full 2>&1
+_consume_free_space $testdir >> $seqres.full 2>&1
 sync
 
 echo "mmap CoW the big file"
diff --git a/tests/generic/174 b/tests/generic/174
index 38fad1d..d811307 100755
--- a/tests/generic/174
+++ b/tests/generic/174
@@ -41,6 +41,7 @@  _cleanup()
 . ./common/filter
 . ./common/attr
 . ./common/reflink
+. ./common/populate
 
 # real QA test starts here
 _supported_os Linux
@@ -76,9 +77,7 @@  _cp_reflink $testdir/bigfile $testdir/clonefile
 sync
 
 echo "Allocate the rest of the space"
-nr_free=$(stat -f -c '%f' $testdir)
-touch $testdir/file0 $testdir/file1
-_pwrite_byte 0x61 0 $((blksz * nr_free)) $testdir/eat_my_space >> $seqres.full 2>&1
+_consume_free_space $testdir >> $seqres.full 2>&1
 sync
 
 echo "CoW the big file"
diff --git a/tests/generic/282 b/tests/generic/282
index 6452025..8a30811 100755
--- a/tests/generic/282
+++ b/tests/generic/282
@@ -80,8 +80,7 @@  md5sum $testdir/file2 | _filter_scratch
 echo "CoW and unmount"
 sync
 _dmerror_load_error_table
-urk=$($XFS_IO_PROG -f -c "mmap -rw 0 $filesize" -c "mwrite -S 0x63 0 $filesize" $testdir/file2 > $TEST_DIR/mwrite.out 2>&1)
-cat $TEST_DIR/mwrite.out | tee -a $seqres.full
+$XFS_IO_PROG -f -c "mmap -rw 0 $filesize" -c "mwrite -S 0x63 0 $filesize" $testdir/file2 >> $seqres.full 2>&1
 _dmerror_load_working_table
 rm -rf $testdir/file2 >> $seqres.full 2>&1
 _dmerror_unmount