misc: move exit status into trap handler
[xfstests-dev.git] / tests / generic / 546
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2019 SUSE Linux Products GmbH. All Rights Reserved.
4 #
5 # FS QA Test 546
6 #
7 # Test when a fs is full we can still:
8 # - Do buffered write into a unpopulated preallocated extent
9 # - Clone the untouched part of that preallocated extent
10 # - Fsync
11 # - No data loss even power loss happens after fsync
12 # All operations above should not fail.
13 #
14 seq=`basename $0`
15 seqres=$RESULT_DIR/$seq
16 echo "QA output created by $seq"
17
18 here=`pwd`
19 tmp=/tmp/$$
20 status=1        # failure is the default!
21 trap "_cleanup; exit \$status" 0 1 2 3 15
22
23 _cleanup()
24 {
25         _cleanup_flakey
26         cd /
27         rm -f $tmp.*
28 }
29
30 # get standard environment, filters and checks
31 . ./common/rc
32 . ./common/filter
33 . ./common/reflink
34 . ./common/dmflakey
35
36 # remove previous $seqres.full before test
37 rm -f $seqres.full
38
39 # real QA test starts here
40
41 # Modify as appropriate.
42 _supported_fs generic
43 _require_xfs_io_command "falloc"
44 _require_scratch_reflink
45 _require_dm_target flakey
46
47 _scratch_mkfs_sized $((512 * 1024 * 1024)) >> $seqres.full 2>&1
48 _require_metadata_journaling $SCRATCH_DEV
49 _init_flakey
50 _mount_flakey
51
52 # Create preallocated extent where we can write into
53 $XFS_IO_PROG -f -c 'falloc 8k 64m' "$SCRATCH_MNT/foobar" >> $seqres.full
54
55 # Use up all data space, to test later write-into-preallocate behavior
56 _pwrite_byte 0x00 0 512m "$SCRATCH_MNT/padding" >> $seqres.full 2>&1
57
58 # Sync to ensure that padding file reach disk so that at log recovery we
59 # still have no data space
60 sync
61
62 # This should not fail
63 _pwrite_byte 0xcd 1m 16m "$SCRATCH_MNT/foobar" >> $seqres.full
64
65 # Do reflink here, we shouldn't use extra data space, thus it should not fail
66 $XFS_IO_PROG -c "reflink ${SCRATCH_MNT}/foobar 8k 0 4k" "$SCRATCH_MNT/foobar" \
67         >> $seqres.full
68
69 # Checksum before power loss
70 echo md5 before $(_md5_checksum "$SCRATCH_MNT/foobar")
71
72 # Fsync to check if writeback is ok
73 $XFS_IO_PROG -c 'fsync'  "$SCRATCH_MNT/foobar"
74
75 # Now emulate power loss
76 _flakey_drop_and_remount
77
78 # Checksum after power loss
79 echo md5 after $(_md5_checksum "$SCRATCH_MNT/foobar")
80
81 # success, all done
82 status=0
83 exit