| #! /bin/bash | 
 | # SPDX-License-Identifier: GPL-2.0 | 
 | # Copyright (c) 2006 Silicon Graphics, Inc.  All Rights Reserved. | 
 | # | 
 | # FSQA Test No. 130 | 
 | # | 
 | # xfs_io vector read/write and trunc tests. modified from cxfsqa tests | 
 | # - unixfile_basic_block_hole | 
 | # - unixfile_buffer_direct_coherency | 
 | # - unixfile_direct_rw | 
 | # - unixfile_eof_direct | 
 | # - unixfile_fsb_edge | 
 | # - unixfile_open_append | 
 | # - unixfile_open_trunc | 
 | # - unixfile_small_vector_async_rw | 
 | # - unixfile_small_vector_sync_rw | 
 | # | 
 | . ./common/preamble | 
 | _begin_fstest pattern auto quick | 
 |  | 
 | # Import common functions. | 
 | . ./common/filter | 
 |  | 
 |  | 
 | _require_scratch | 
 | _require_sparse_files | 
 | _require_odirect | 
 |  | 
 | _scratch_mkfs >/dev/null 2>&1 | 
 | _scratch_mount | 
 |  | 
 | echo "End-of-file zeroing with direct I/O" | 
 | $XFS_IO_PROG -f -d -t -c "pwrite -S 0x63 0 65536" \ | 
 |     -c "truncate 1" \ | 
 |     -c "pwrite -S 0x41 65536 65536" \ | 
 |     -c "pread -v 0 131072" \ | 
 |     $SCRATCH_MNT/eof-zeroing_direct | _filter_xfs_io_unique | 
 |  | 
 | echo | 
 | echo "Basic Block Hole test" | 
 | $XFS_IO_PROG -f -t -c "truncate 8192" \ | 
 |     -c "pread -v 5000 3000" \ | 
 |     $SCRATCH_MNT/blackhole | _filter_xfs_io_unique | 
 |  | 
 | echo | 
 | echo "Test buffered and direct IO coherency" | 
 | $XFS_IO_PROG -f -t -c "pwrite -S 0x41 8000 1000" \ | 
 |     -c "pwrite -S 0x57 4000 1000" \ | 
 |     $SCRATCH_MNT/buff_direct_coherency | _filter_xfs_io_unique | 
 |  | 
 | $XFS_IO_PROG -d -c "pwrite -S 0x78 20480 4096"\ | 
 |     -c "pwrite -S 0x79 4096 4096"\ | 
 |     $SCRATCH_MNT/buff_direct_coherency | _filter_xfs_io_unique | 
 |  | 
 | $XFS_IO_PROG -c "pread -v 0 9000"\ | 
 |     $SCRATCH_MNT/buff_direct_coherency | _filter_xfs_io_unique | 
 |  | 
 | echo | 
 | echo "Test direct read and write" | 
 | $XFS_IO_PROG -f -d -t -c "pwrite -S 0x78 0 65536"\ | 
 |     -c "pread -v 0 65536"\ | 
 |     -c "pwrite -S 0x46 65536 6553600"\ | 
 |     -c "pread -v 0 6619136"\ | 
 |     $SCRATCH_MNT/direct_io | _filter_xfs_io_unique | 
 |  | 
 | $XFS_IO_PROG -d -c "pread -v 0 6619136"\ | 
 |     $SCRATCH_MNT/direct_io | _filter_xfs_io_unique | 
 |  | 
 | $XFS_IO_PROG -f -d -t -c "pwrite -S 0x61 0 65536"\ | 
 |     -c "pread -v 0 65536"\ | 
 |     -c "pwrite -S 0x62 65536 131072"\ | 
 |     -c "pread -v 0 131072"\ | 
 |     $SCRATCH_MNT/async_direct_io | _filter_xfs_io_unique | 
 |  | 
 | $XFS_IO_PROG -d -c "pread -v 0 131072"\ | 
 |     $SCRATCH_MNT/async_direct_io | _filter_xfs_io_unique | 
 |  | 
 | echo | 
 | echo "FSB Edge test" | 
 | $XFS_IO_PROG -f -t -c "truncate 131072"\ | 
 |     -c "pwrite -S 0x5F 0 131072"\ | 
 |     -c "truncate 0"\ | 
 |     -c "truncate 131072"\ | 
 |     -c "pwrite -S 0x61 65535 2"\ | 
 |     -c "pread -v 0 131072"\ | 
 |     $SCRATCH_MNT/fsb_edge_test | _filter_xfs_io_unique | 
 |  | 
 | echo | 
 | echo "Open Trunk test (O_TRUNC)" | 
 | for n in 0 1 2 3 4 | 
 | do | 
 |     $XFS_IO_PROG -f -t -c "pread -v 0 100" $SCRATCH_MNT/$n | _filter_xfs_io_unique | 
 |  | 
 |     echo "Test" > $SCRATCH_MNT/$n | 
 |     $XFS_IO_PROG -f -t -c "pread -v 0 100" $SCRATCH_MNT/$n | _filter_xfs_io_unique | 
 |     cat $SCRATCH_MNT/$n | 
 | done | 
 | echo "DONE" | 
 |  | 
 | echo | 
 | echo "Append test" | 
 | echo "append to me" > $SCRATCH_MNT/append | 
 | $XFS_IO_PROG -a -c "pwrite -S 0x61 0 10" \ | 
 |     -c "pread -v 0 24"\ | 
 |     $SCRATCH_MNT/append | _filter_xfs_io_unique | 
 |  | 
 | echo | 
 | echo "Small Vector Async" | 
 | echo "abcdefghijklmnopqrstuvwxyz" > $SCRATCH_MNT/small_vector_async | 
 | $XFS_IO_PROG -f -c "pread -v 0 1"\ | 
 |     -c "pread -v 1 1"\ | 
 |     -c "pread -v 2 1"\ | 
 |     -c "pread -v 3 1"\ | 
 |     -c "pread -v 4 1"\ | 
 |     -c "pread -v 5 1"\ | 
 |     -c "pread -v 6 1"\ | 
 |     -c "pread -v 7 1"\ | 
 |     -c "pread -v 8 1"\ | 
 |     -c "pread -v 9 1"\ | 
 |     -c "pread -v 10 1"\ | 
 |     -c "pread -v 11 1"\ | 
 |     -c "pread -v 12 1"\ | 
 |     -c "pread -v 13 13"\ | 
 |     -c "pwrite -S 0x61 4090 1"\ | 
 |     -c "pwrite -S 0x62 4091 1"\ | 
 |     -c "pwrite -S 0x63 4092 1"\ | 
 |     -c "pwrite -S 0x64 4093 1"\ | 
 |     -c "pwrite -S 0x65 4094 1"\ | 
 |     -c "pwrite -S 0x66 4095 1"\ | 
 |     -c "pwrite -S 0x67 4096 1"\ | 
 |     -c "pwrite -S 0x68 4097 1"\ | 
 |     -c "pwrite -S 0x69 4098 1"\ | 
 |     -c "pwrite -S 0x6A 4099 1"\ | 
 |     -c "pwrite -S 0x6B 4100 1"\ | 
 |     -c "pwrite -S 0x6C 4101 1"\ | 
 |     -c "pwrite -S 0x6D 4102 1"\ | 
 |     -c "pwrite -S 0x6E 4103 1"\ | 
 |     -c "pwrite -S 0x6F 4104 1"\ | 
 |     -c "pwrite -S 0x70 4105 1"\ | 
 |     -c "pread -v 4090 4"\ | 
 |     -c "pread -v 4094 4"\ | 
 |     -c "pread -v 4098 4"\ | 
 |     -c "pread -v 4102 4"\ | 
 |     -c "pwrite -S 0x61 10000000000 1"\ | 
 |     -c "pwrite -S 0x62 10000000001 1"\ | 
 |     -c "pwrite -S 0x63 10000000002 1"\ | 
 |     -c "pwrite -S 0x64 10000000003 1"\ | 
 |     -c "pwrite -S 0x65 10000000004 1"\ | 
 |     -c "pwrite -S 0x66 10000000005 1"\ | 
 |     -c "pwrite -S 0x67 10000000006 1"\ | 
 |     -c "pwrite -S 0x68 10000000007 1"\ | 
 |     -c "pwrite -S 0x69 10000000008 1"\ | 
 |     -c "pwrite -S 0x6A 10000000009 1"\ | 
 |     -c "pwrite -S 0x6B 10000000010 1"\ | 
 |     -c "pwrite -S 0x6C 10000000011 1"\ | 
 |     -c "pwrite -S 0x6D 10000000012 1"\ | 
 |     -c "pwrite -S 0x6E 10000000013 1"\ | 
 |     -c "pwrite -S 0x6F 10000000014 1"\ | 
 |     -c "pwrite -S 0x70 10000000015 1"\ | 
 |     -c "pread -v 10000000000 4"\ | 
 |     -c "pread -v 10000000004 4"\ | 
 |     -c "pread -v 10000000008 4"\ | 
 |     -c "pread -v 10000000012 4"\ | 
 |     $SCRATCH_MNT/small_vector_async | _filter_xfs_io_unique | 
 |  | 
 | echo | 
 | echo "Small Vector Sync" | 
 | echo "abcdefghijklmnopqrstuvwxyz" > $SCRATCH_MNT/small_vector_async | 
 | $XFS_IO_PROG -f -s -c "pread -v 0 1"\ | 
 |     -c "pread -v 1 1"\ | 
 |     -c "pread -v 2 1"\ | 
 |     -c "pread -v 3 1"\ | 
 |     -c "pread -v 4 1"\ | 
 |     -c "pread -v 5 1"\ | 
 |     -c "pread -v 6 1"\ | 
 |     -c "pread -v 7 1"\ | 
 |     -c "pread -v 8 1"\ | 
 |     -c "pread -v 9 1"\ | 
 |     -c "pread -v 10 1"\ | 
 |     -c "pread -v 11 1"\ | 
 |     -c "pread -v 12 1"\ | 
 |     -c "pread -v 13 13"\ | 
 |     -c "pwrite -S 0x61 4090 1"\ | 
 |     -c "pwrite -S 0x62 4091 1"\ | 
 |     -c "pwrite -S 0x63 4092 1"\ | 
 |     -c "pwrite -S 0x64 4093 1"\ | 
 |     -c "pwrite -S 0x65 4094 1"\ | 
 |     -c "pwrite -S 0x66 4095 1"\ | 
 |     -c "pwrite -S 0x67 4096 1"\ | 
 |     -c "pwrite -S 0x68 4097 1"\ | 
 |     -c "pwrite -S 0x69 4098 1"\ | 
 |     -c "pwrite -S 0x6A 4099 1"\ | 
 |     -c "pwrite -S 0x6B 4100 1"\ | 
 |     -c "pwrite -S 0x6C 4101 1"\ | 
 |     -c "pwrite -S 0x6D 4102 1"\ | 
 |     -c "pwrite -S 0x6E 4103 1"\ | 
 |     -c "pwrite -S 0x6F 4104 1"\ | 
 |     -c "pwrite -S 0x70 4105 1"\ | 
 |     -c "pread -v 4090 4"\ | 
 |     -c "pread -v 4094 4"\ | 
 |     -c "pread -v 4098 4"\ | 
 |     -c "pread -v 4102 4"\ | 
 |     -c "pwrite -S 0x61 10000000000 1"\ | 
 |     -c "pwrite -S 0x62 10000000001 1"\ | 
 |     -c "pwrite -S 0x63 10000000002 1"\ | 
 |     -c "pwrite -S 0x64 10000000003 1"\ | 
 |     -c "pwrite -S 0x65 10000000004 1"\ | 
 |     -c "pwrite -S 0x66 10000000005 1"\ | 
 |     -c "pwrite -S 0x67 10000000006 1"\ | 
 |     -c "pwrite -S 0x68 10000000007 1"\ | 
 |     -c "pwrite -S 0x69 10000000008 1"\ | 
 |     -c "pwrite -S 0x6A 10000000009 1"\ | 
 |     -c "pwrite -S 0x6B 10000000010 1"\ | 
 |     -c "pwrite -S 0x6C 10000000011 1"\ | 
 |     -c "pwrite -S 0x6D 10000000012 1"\ | 
 |     -c "pwrite -S 0x6E 10000000013 1"\ | 
 |     -c "pwrite -S 0x6F 10000000014 1"\ | 
 |     -c "pwrite -S 0x70 10000000015 1"\ | 
 |     -c "pread -v 10000000000 4"\ | 
 |     -c "pread -v 10000000004 4"\ | 
 |     -c "pread -v 10000000008 4"\ | 
 |     -c "pread -v 10000000012 4"\ | 
 |     $SCRATCH_MNT/small_vector_async | _filter_xfs_io_unique | 
 |  | 
 | status=0 | 
 | exit |