From: Darrick J. Wong <djwong@xxxxxxxxxx> XFS has this behavior in its reflink implementation where it returns ENOSPC if one of the AGs that would be involved in the sharing operation becomes more than 90% full. As Kent Overstreet points out, that means the snapshot creator shuts down when the filesystem is only about a third full. We could exercise the system harder by not *forcing* reflink, which will actually fill the filesystem full. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- common/reflink | 8 ++++++++ tests/generic/166 | 2 +- tests/generic/167 | 2 +- tests/generic/333 | 2 +- tests/generic/334 | 2 +- tests/generic/671 | 2 +- 6 files changed, 13 insertions(+), 5 deletions(-) diff --git a/common/reflink b/common/reflink index 22adc4449b..8f30dc6784 100644 --- a/common/reflink +++ b/common/reflink @@ -226,6 +226,14 @@ _cp_reflink() { cp --reflink=always -p -f "$file1" "$file2" } +# Create file2 as a snapshot of file1 via cp and possibly reflink. +_reflink_snapshot() { + file1="$1" + file2="$2" + + cp --reflink=auto -p -f "$file1" "$file2" +} + # Reflink some file1 into file2 _reflink() { file1="$1" diff --git a/tests/generic/166 b/tests/generic/166 index 0eb2ec9c3a..941b51b3f1 100755 --- a/tests/generic/166 +++ b/tests/generic/166 @@ -60,7 +60,7 @@ snappy() { sleep 0.01 continue; fi - out="$(_cp_reflink $testdir/file1 $testdir/snap_$n 2>&1)" + out="$(_reflink_snapshot $testdir/file1 $testdir/snap_$n 2>&1)" res=$? echo "$out" | grep -q "No space left" && break test -n "$out" && echo "$out" diff --git a/tests/generic/167 b/tests/generic/167 index ae5fa5eb1c..3670940825 100755 --- a/tests/generic/167 +++ b/tests/generic/167 @@ -50,7 +50,7 @@ _scratch_cycle_mount snappy() { n=0 while [ ! -e $finished_file ]; do - out="$(_cp_reflink $testdir/file1 $testdir/snap_$n 2>&1)" + out="$(_reflink_snapshot $testdir/file1 $testdir/snap_$n 2>&1)" res=$? echo "$out" | grep -q "No space left" && break test -n "$out" && echo "$out" diff --git a/tests/generic/333 b/tests/generic/333 index bf1967ce29..19e69993a3 100755 --- a/tests/generic/333 +++ b/tests/generic/333 @@ -53,7 +53,7 @@ _scratch_cycle_mount snappy() { n=0 while [ ! -e $finished_file ]; do - out="$(_cp_reflink $testdir/file1 $testdir/snap_$n 2>&1)" + out="$(_reflink_snapshot $testdir/file1 $testdir/snap_$n 2>&1)" res=$? echo $out | grep -q "No space left" && break test -n "$out" && echo $out diff --git a/tests/generic/334 b/tests/generic/334 index b9c14b87ac..1e4d37b415 100755 --- a/tests/generic/334 +++ b/tests/generic/334 @@ -52,7 +52,7 @@ _scratch_cycle_mount snappy() { n=0 while [ ! -e $finished_file ]; do - out="$(_cp_reflink $testdir/file1 $testdir/snap_$n 2>&1)" + out="$(_reflink_snapshot $testdir/file1 $testdir/snap_$n 2>&1)" res=$? echo $out | grep -q "No space left" && break test -n "$out" && echo $out diff --git a/tests/generic/671 b/tests/generic/671 index b6cc0573f3..24ed24e213 100755 --- a/tests/generic/671 +++ b/tests/generic/671 @@ -41,7 +41,7 @@ _scratch_cycle_mount snappy() { n=0 while [ ! -e $finished_file ]; do - out="$(_cp_reflink $testdir/file1 $testdir/snap_$n 2>&1)" + out="$(_reflink_snapshot $testdir/file1 $testdir/snap_$n 2>&1)" res=$? echo "$out" | grep -q "No space left" && break test -n "$out" && echo "$out"