mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
b1180a9f75
For 64k block size, With 256MiB as the XFS filesystem size and 168 MiB as the size of the clone source file, we end up hitting ENOSPC when cloning the source file. This happens due to lack of space for housing the corresponding metadata. This scenario also occurs when using a 512MiB XFS filesystem and 300MiB clone source file. Hence this commit increases the size of the test filesystem to 1 GiB and the size of the clone source file to 768MiB. Signed-off-by: Chandan Rajendra <chandan@linux.vnet.ibm.com> Tested-by: Zorro Lang <zlang@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
85 lines
2.0 KiB
Bash
Executable File
85 lines
2.0 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2015, Oracle and/or its affiliates. All Rights Reserved.
|
|
#
|
|
# FS QA Test No. 172
|
|
#
|
|
# Reflink a file that uses more than half of the space, then try to observe
|
|
# ENOSPC while copy-on-writing the file via the page cache.
|
|
#
|
|
seq=`basename $0`
|
|
seqres=$RESULT_DIR/$seq
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=1 # failure is the default!
|
|
trap "_cleanup; exit \$status" 0 1 2 3 15
|
|
|
|
_cleanup()
|
|
{
|
|
cd /
|
|
rm -rf $tmp.* $testdir1
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/populate
|
|
. ./common/filter
|
|
. ./common/attr
|
|
. ./common/reflink
|
|
|
|
# real QA test starts here
|
|
_supported_os Linux
|
|
_require_scratch_reflink
|
|
_require_cp_reflink
|
|
|
|
rm -f $seqres.full
|
|
|
|
echo "Format and mount"
|
|
_scratch_mkfs > $seqres.full 2>&1
|
|
_scratch_mount >> $seqres.full 2>&1
|
|
|
|
testdir=$SCRATCH_MNT/test-$seq
|
|
mkdir $testdir
|
|
|
|
echo "Reformat with appropriate size"
|
|
blksz="$(_get_block_size $testdir)"
|
|
umount $SCRATCH_MNT
|
|
|
|
file_size=$((768 * 1024 * 1024))
|
|
fs_size=$((1024 * 1024 * 1024))
|
|
_scratch_mkfs_sized $fs_size >> $seqres.full 2>&1
|
|
_scratch_mount >> $seqres.full 2>&1
|
|
rm -rf $testdir
|
|
mkdir $testdir
|
|
|
|
echo "Create a big file and reflink it"
|
|
_pwrite_byte 0x61 0 $file_size $testdir/bigfile >> $seqres.full 2>&1
|
|
_cp_reflink $testdir/bigfile $testdir/clonefile
|
|
sync
|
|
|
|
echo "Allocate the rest of the space"
|
|
_fill_fs $fs_size $testdir/space $blksz 0 >> $seqres.full 2>&1
|
|
sync
|
|
|
|
echo "CoW the big file"
|
|
out="$(_pwrite_byte 0x62 0 $file_size $testdir/bigfile 2>&1 | \
|
|
_filter_xfs_io_error)"
|
|
echo ${out} | grep -q "No space left on device" || echo "CoW should have failed with ENOSPC"
|
|
echo ${out} >> $seqres.full 2>&1
|
|
echo ${out}
|
|
|
|
echo "Remount and try CoW again"
|
|
_scratch_cycle_mount
|
|
|
|
out="$(_pwrite_byte 0x62 0 $file_size $testdir/bigfile 2>&1 | \
|
|
_filter_xfs_io_error)"
|
|
echo ${out} | grep -q "No space left on device" || echo "CoW should have failed with ENOSPC"
|
|
echo ${out} >> $seqres.full 2>&1
|
|
echo ${out}
|
|
|
|
# success, all done
|
|
status=0
|
|
exit
|