#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2016 Oracle, Inc. All Rights Reserved. # # FS QA Test No. 351 # # Test the unsupported fallocate flags on a block device. No collapse # or insert range, no regular fallocate, no forgetting keep-space on # zero range, no punching past EOD, no requests that aren't aligned # with the logicalsector size, and make sure the fallbacks work for # devices that don't support write_same or discard. # 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 7 15 _cleanup() { cd / rm -rf $tmp.* } # get standard environment, filters and checks . ./common/rc . ./common/filter . ./common/scsi_debug # real QA test starts here _require_scsi_debug _require_xfs_io_command "falloc" _require_xfs_io_command "finsert" _require_xfs_io_command "fcollapse" _require_xfs_io_command "fzero" _require_xfs_io_command "fpunch" echo "Create and format" dev=$(_get_scsi_debug_dev 4096 4096 0 4 "lbpws=1 lbpws10=1") _pwrite_byte 0x62 0 4m $dev >> $seqres.full $XFS_IO_PROG -c "fsync" $dev echo "Regular fallocate" $XFS_IO_PROG -c "falloc 64k 64k" $dev echo "Insert range" $XFS_IO_PROG -c "finsert 128k 64k" $dev echo "Collapse range" $XFS_IO_PROG -c "fcollapse 256k 64k" $dev echo "Unaligned zero range" $XFS_IO_PROG -c "fzero -k 512 512" $dev echo "Unaligned punch" $XFS_IO_PROG -c "fpunch 512 512" $dev echo "Zero range past MAX_LFS_FILESIZE keep size" # zod = MAX_LFS_FILESIZE zod=$(_get_max_lfs_filesize) $XFS_IO_PROG -c "fzero -k 512k $zod" $dev echo "Zero range past MAX_LFS_FILESIZE" $XFS_IO_PROG -c "fzero 512k $zod" $dev echo "Zero range to MAX_LFS_FILESIZE fail w/o keepsize" $XFS_IO_PROG -c "fzero 0 $zod" $dev echo "Zero range starts past EOD" $XFS_IO_PROG -c "fzero -k 900m 1m" $dev echo "Punch starts past EOD" $XFS_IO_PROG -c "fpunch 900m 1m" $dev echo "Check contents" md5sum $dev | sed -e "s|$dev|SCSI_DEBUG_DEV|g" echo "Destroy device" _put_scsi_debug_dev echo "Create w/o unmap or writesame and format" dev=$(_get_scsi_debug_dev 512 512 0 4 "lbpws=0 lbpws10=0 lbpu=0 write_same_length=0 unmap_max_blocks=0") _pwrite_byte 0x62 0 4m $dev >> $seqres.full $XFS_IO_PROG -c "fsync" $dev echo "Zero punch, no fallback available" $XFS_IO_PROG -c "fpunch 512k 512k" $dev echo "Zero range, write fallback" $XFS_IO_PROG -c "fzero -k 1536k 512k" $dev echo "Check contents" md5sum $dev | sed -e "s|$dev|SCSI_DEBUG_DEV|g" echo "Destroy device" _put_scsi_debug_dev # success, all done status=0 exit