| #! /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. |
| # |
| . ./common/preamble |
| _begin_fstest blockdev rw punch collapse insert zero prealloc |
| |
| _register_cleanup "_cleanup" BUS |
| |
| # Import common functions. |
| . ./common/filter |
| . ./common/scsi_debug |
| |
| _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 |