mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
61a726e9e3
ext3 does not support direct IO for files with data journalling. This confuses test 272. Make the test check whether open succeeds and perform the writing only if it does. Thanks for Dave Chinner for suggesting a simpler way to fix the test. Signed-off-by: Jan Kara <jack@suse.cz> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Ben Myers <bpm@sgi.com>
110 lines
2.7 KiB
Bash
Executable File
110 lines
2.7 KiB
Bash
Executable File
#! /bin/bash
|
|
# FSQA Test No. 272
|
|
#
|
|
# Test data journaling flag switch for a single file
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope that it would be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write the Free Software Foundation,
|
|
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#
|
|
#-----------------------------------------------------------------------
|
|
#
|
|
# creator
|
|
owner=dmonakhov@openvz.org
|
|
|
|
seq=`basename $0`
|
|
echo "QA output created by $seq"
|
|
|
|
here=`pwd`
|
|
tmp=/tmp/$$
|
|
status=1 # failure is the default!
|
|
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
|
|
|
|
# ext3 doesn't support direct IO in journalling mode
|
|
write_opt_list="iflag=noatime conv=notrunc conv=fsync"
|
|
# For filesystems that can handle it, add also direct IO test
|
|
[ $FSTYP = "ext4" ] && write_opt_list="$write_opt_list oflag=direct"
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common.rc
|
|
. ./common.filter
|
|
_workout()
|
|
{
|
|
echo "Switch data journalling mode. Silence is golden."
|
|
chattr_opt_list="+j -j +jS -j"
|
|
idx=0
|
|
#
|
|
for write_opt in $write_opt_list
|
|
do
|
|
idx=$((idx + 1))
|
|
for chattr_opt in $chattr_opt_list
|
|
do
|
|
|
|
echo "OP write_opt: $write_opt 4M, \
|
|
chattr_opt: $chattr_opt" >>$seq.full
|
|
dd if=/dev/zero of=$SCRATCH_MNT/file.$idx \
|
|
bs=1M count=4 $write_opt \
|
|
>> $seq.full 2>&1 || exit
|
|
chattr $chattr_opt $SCRATCH_MNT/file.$idx >> $seq.full \
|
|
|| exit
|
|
done
|
|
done
|
|
sync
|
|
# Same as previous test, but for one file,
|
|
# and with ENOSPC triggering
|
|
for write_opt in $write_opt_list
|
|
do
|
|
idx=$((idx + 1))
|
|
for chattr_opt in $chattr_opt_list
|
|
do
|
|
|
|
echo "OP write_opt: $write_opt ENOSPC, \
|
|
chattr_opt: $chattr_opt" >>$seq.full
|
|
dd if=/dev/zero of=$SCRATCH_MNT/file.$idx \
|
|
bs=1M $write_opt >> $seq.full 2>&1
|
|
chattr $chattr_opt $SCRATCH_MNT/file.$idx \
|
|
>> $seq.full || exit
|
|
done
|
|
sync
|
|
unlink $SCRATCH_MNT/file.$idx
|
|
done
|
|
}
|
|
|
|
# real QA test starts here
|
|
_supported_fs ext3 ext4
|
|
_supported_os Linux
|
|
_need_to_be_root
|
|
_require_scratch
|
|
|
|
_scratch_mkfs_sized $((64 * 1024 * 1024)) >> $seq.full 2>&1
|
|
_scratch_mount
|
|
|
|
if ! _workout; then
|
|
echo "workout failed"
|
|
_scratch_unmount
|
|
status=1
|
|
exit
|
|
fi
|
|
|
|
if ! _scratch_unmount; then
|
|
echo "failed to umount"
|
|
status=1
|
|
exit
|
|
fi
|
|
echo "Check filesystem"
|
|
_check_scratch_fs
|
|
status=$?
|
|
exit
|