Files
apfstests/tests/generic/496
T
Omar Sandoval 70c4067285 generic/{472,496}: fix swap file creation on Btrfs
The swap file must be set nocow before it is written to, otherwise it is
ignored and Btrfs refuses to activate it as swap.

Fixes: 25ce974006 ("generic: test swapfile creation, activation, and deactivation")
Signed-off-by: Omar Sandoval <osandov@fb.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2018-11-05 00:42:49 +08:00

80 lines
1.9 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2018 Oracle. All Rights Reserved.
#
# FS QA Test No. 496
#
# Test various swapfile activation oddities on filesystems that support
# fallocated swapfiles.
#
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 /
swapoff $swapfile 2> /dev/null
rm -f $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
# remove previous $seqres.full before test
rm -f $seqres.full
# real QA test starts here
_supported_fs generic
_supported_os Linux
_require_scratch_swapfile
_require_test_program mkswap
_require_test_program swapon
_require_xfs_io_command "falloc"
rm -f $seqres.full
_scratch_mkfs >>$seqres.full 2>&1
_scratch_mount >>$seqres.full 2>&1
swapfile=$SCRATCH_MNT/swap
len=$((2 * 1048576))
page_size=$(get_page_size)
swapfile_cycle() {
local swapfile="$1"
"$here/src/mkswap" $swapfile >> $seqres.full
"$here/src/swapon" $swapfile 2>&1 | _filter_scratch
swapoff $swapfile 2>> $seqres.full
rm -f $swapfile
}
# Create a fallocated swap file
echo "fallocate swap" | tee -a $seqres.full
touch $swapfile
# Swap files must be nocow on Btrfs.
$CHATTR_PROG +C $swapfile >> $seqres.full 2>&1
$XFS_IO_PROG -f -c "falloc 0 $len" $swapfile >> $seqres.full
"$here/src/mkswap" $swapfile
"$here/src/swapon" $swapfile >> $seqres.full 2>&1 || \
_notrun "fallocated swap not supported here"
swapoff $swapfile
# Create a fallocated swap file and touch every other $PAGE_SIZE to create
# a mess of written/unwritten extent records
echo "mixed swap" | tee -a $seqres.full
$XFS_IO_PROG -f -c "falloc 0 $len" $swapfile >> $seqres.full
seq $page_size $((page_size * 2)) $len | while read offset; do
_pwrite_byte 0x58 $offset 1 $swapfile >> $seqres.full
done
swapfile_cycle $swapfile
status=0
exit