58177b44ce0cce34d9f953cc134dff7ba8bfd901
[xfstests-dev.git] / tests / ext4 / 031
1 #! /bin/bash
2 # FS QA Test ext4/031
3 #
4 # This is a regression test for kernel patch:
5 #   ext4: prevent data corruption with inline data + DAX
6 # created by Ross Zwisler <ross.zwisler@linux.intel.com>
7 #
8 #-----------------------------------------------------------------------
9 # Copyright (c) 2017-2018 Intel Corporation.  All Rights Reserved.
10 #
11 # This program is free software; you can redistribute it and/or
12 # modify it under the terms of the GNU General Public License as
13 # published by the Free Software Foundation.
14 #
15 # This program is distributed in the hope that it would be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 # GNU General Public License for more details.
19 #
20 # You should have received a copy of the GNU General Public License
21 # along with this program; if not, write the Free Software Foundation,
22 # Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
23 #-----------------------------------------------------------------------
24 #
25
26 seq=`basename $0`
27 seqres=$RESULT_DIR/$seq
28 echo "QA output created by $seq"
29
30 here=`pwd`
31 tmp=/tmp/$$
32 status=1        # failure is the default!
33 trap "_cleanup; exit \$status" 0 1 2 3 15
34
35 _cleanup()
36 {
37         cd /
38         rm -f $tmp.*
39 }
40
41 # get standard environment, filters and checks
42 . ./common/rc
43 . ./common/filter
44
45 # remove previous $seqres.full before test
46 rm -f $seqres.full
47
48 # DAX needs to be off so we can create an inode with inline data
49 SAVE_MOUNT_OPTIONS="$MOUNT_OPTIONS"
50 MOUNT_OPTIONS=""
51
52 # Modify as appropriate.
53 _supported_os Linux
54 _supported_fs ext4
55 _require_scratch_dax
56 _require_test_program "t_ext4_dax_inline_corruption"
57 _require_scratch_ext4_feature "inline_data"
58
59 # real QA test starts here
60 _scratch_mkfs_ext4 -O inline_data > $seqres.full 2>&1
61
62 TESTFILE=$SCRATCH_MNT/testfile
63
64 _scratch_mount  >> $seqres.full 2>&1
65
66 echo "Need to make some inline data..." > $TESTFILE
67
68 export MOUNT_OPTIONS="$SAVE_MOUNT_OPTIONS"
69
70 _scratch_unmount >> $seqres.full 2>&1
71 _scratch_mount "-o dax" >> $seqres.full 2>&1
72
73 if [[ $? != 0 ]]; then
74         # _require_scratch_dax already verified that we could mount with DAX.
75         # Failure here is expected because we have inline data.
76         echo "Silence is golden"
77         status=0
78         exit
79 fi
80
81 $here/src/t_ext4_dax_inline_corruption $TESTFILE
82
83 # success, all done
84 echo "Silence is golden"
85 status=0
86 exit