fstests: convert remaining tests to SPDX license tags
[xfstests-dev.git] / tests / generic / 351
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2016 Oracle, Inc.  All Rights Reserved.
4 #
5 # FS QA Test No. 351
6 #
7 # Test the unsupported fallocate flags on a block device.  No collapse
8 # or insert range, no regular fallocate, no forgetting keep-space on
9 # zero range, no punching past EOD, no requests that aren't aligned
10 # with the logicalsector size, and make sure the fallbacks work for
11 # devices that don't support write_same or discard.
12 #
13 seq=`basename $0`
14 seqres=$RESULT_DIR/$seq
15 echo "QA output created by $seq"
16
17 here=`pwd`
18 tmp=/tmp/$$
19 status=1        # failure is the default!
20 trap "_cleanup; exit \$status" 0 1 2 3 7 15
21
22 _cleanup()
23 {
24     cd /
25     rm -rf $tmp.*
26 }
27
28 # get standard environment, filters and checks
29 . ./common/rc
30 . ./common/filter
31 . ./common/scsi_debug
32
33 # real QA test starts here
34 _supported_os Linux
35 _require_scsi_debug
36 _require_xfs_io_command "falloc"
37 _require_xfs_io_command "finsert"
38 _require_xfs_io_command "fcollapse"
39 _require_xfs_io_command "fzero"
40 _require_xfs_io_command "fpunch"
41
42
43 echo "Create and format"
44 dev=$(_get_scsi_debug_dev 4096 4096 0 4 "lbpws=1 lbpws10=1")
45 _pwrite_byte 0x62 0 4m $dev >> $seqres.full
46 $XFS_IO_PROG -c "fsync" $dev
47
48 echo "Regular fallocate"
49 $XFS_IO_PROG -c "falloc 64k 64k" $dev
50
51 echo "Insert range"
52 $XFS_IO_PROG -c "finsert 128k 64k" $dev
53
54 echo "Collapse range"
55 $XFS_IO_PROG -c "fcollapse 256k 64k" $dev
56
57 echo "Unaligned zero range"
58 $XFS_IO_PROG -c "fzero -k 512 512" $dev
59
60 echo "Unaligned punch"
61 $XFS_IO_PROG -c "fpunch 512 512" $dev
62
63 echo "Zero range past MAX_LFS_FILESIZE keep size"
64 # zod = MAX_LFS_FILESIZE
65 case "$(getconf LONG_BIT)" in
66 "32")
67         zod=$(( ($(getconf PAGE_SIZE) << ($(getconf LONG_BIT) - 1) ) - 1))
68         ;;
69 "64")
70         zod=9223372036854775807
71         ;;
72 *)
73         _fail "sizeof(long) == $(getconf LONG_BIT)?"
74         ;;
75 esac
76 $XFS_IO_PROG -c "fzero -k 512k $zod" $dev
77
78 echo "Zero range past MAX_LFS_FILESIZE"
79 $XFS_IO_PROG -c "fzero 512k $zod" $dev
80
81 echo "Zero range to MAX_LFS_FILESIZE fail w/o keepsize"
82 $XFS_IO_PROG -c "fzero 0 $zod" $dev
83
84 echo "Zero range starts past EOD"
85 $XFS_IO_PROG -c "fzero -k 900m 1m" $dev
86
87 echo "Punch starts past EOD"
88 $XFS_IO_PROG -c "fpunch 900m 1m" $dev
89
90 echo "Check contents"
91 md5sum $dev | sed -e "s|$dev|SCSI_DEBUG_DEV|g"
92
93 echo "Destroy device"
94 _put_scsi_debug_dev
95
96 echo "Create w/o unmap or writesame and format"
97 dev=$(_get_scsi_debug_dev 512 512 0 4 "lbpws=0 lbpws10=0 lbpu=0 write_same_length=0 unmap_max_blocks=0")
98 _pwrite_byte 0x62 0 4m $dev >> $seqres.full
99 $XFS_IO_PROG -c "fsync" $dev
100
101 echo "Zero punch, no fallback available"
102 $XFS_IO_PROG -c "fpunch 512k 512k" $dev
103
104 echo "Zero range, write fallback"
105 $XFS_IO_PROG -c "fzero -k 1536k 512k" $dev
106
107 echo "Check contents"
108 md5sum $dev | sed -e "s|$dev|SCSI_DEBUG_DEV|g"
109
110 echo "Destroy device"
111 _put_scsi_debug_dev
112
113 # success, all done
114 status=0
115 exit