generic: test for creating duplicate filenames in encrypted dir
[xfstests-dev.git] / tests / ext4 / 045
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2020 SUSE Linux Products GmbH.  All Rights Reserved.
4 #
5 # FS QA Test No. 045
6 #
7 # Test subdirectory limit of ext4.
8 # We create more than 65000 subdirectories on the ext4 filesystem.
9 #
10 seq=`basename $0`
11 seqres=$RESULT_DIR/$seq
12 echo "QA output created by $seq"
13
14 here=`pwd`
15 tmp=/tmp/$$
16 status=1       # failure is the default!
17 trap "_cleanup; exit \$status" 0 1 2 3 15
18
19 SHORT_DIR=1
20 LONG_DIR=2
21
22 _cleanup()
23 {
24        cd /
25        rm -f $tmp.*
26 }
27
28 # get standard environment, filters and checks
29 . ./common/rc
30 . ./common/filter
31
32 # remove previous $seqres.full before test
33 rm -f $seqres.full
34
35 # real QA test starts here
36 _supported_fs ext4
37
38 _require_scratch
39 _require_test_program "t_create_short_dirs"
40 _require_test_program "t_create_long_dirs"
41 _require_dumpe2fs "$DUMPE2FS_PROG" dumpe2fs
42
43 echo "Silence is golden"
44
45 # Run a test case
46 # $1: Number of directories to create
47 # $2: create short dir or long dir
48 # $3: parent directory
49 workout()
50 {
51        local dir_name_len=""
52        if [ $2 -eq $SHORT_DIR ]; then
53                dir_name_len="short name"
54        else
55                dir_name_len="long name"
56        fi
57
58        echo "Num of dirs to create: $1, Dir name len: $dir_name_len, " \
59                "Parent dir: $3" >> $seqres.full
60
61        _scratch_mkfs "-O extent,dir_nlink,dir_index -I 256" >> $seqres.full 2>&1
62        _scratch_mount
63
64        # create directories
65        mkdir -p $3 2> /dev/null
66
67        if [ $2 -eq $SHORT_DIR ]; then
68                $here/src/t_create_short_dirs $1 $3
69        else
70                $here/src/t_create_long_dirs $1 $3
71        fi
72
73        if [ $? -ne 0 ]; then
74                nr_dirs=`ls $3 | wc -l`
75                echo "Failed to create directories - $nr_dirs"
76                _scratch_unmount
77                return
78        fi
79
80        # delete directories
81        cd $3
82        ls | xargs rmdir
83        if [ $? -ne 0 ]; then
84                echo "Failed to remove directories in $3"
85                cd - > /dev/null
86                _scratch_unmount
87                return
88        fi
89        cd - > /dev/null
90        _scratch_unmount
91
92        # check dir_nlink is set
93        $DUMPE2FS_PROG -h $SCRATCH_DEV 2>> $seqres.full | grep '^Filesystem features' | grep -q dir_nlink
94        if [ $? -ne 0 ]; then
95                echo "Feature dir_nlink is not set, please check $seqres.full for detail"
96                return
97        fi
98 }
99
100 # main
101 DIR_NUM=65537
102 DIR_LEN=( $SHORT_DIR $LONG_DIR )
103 PARENT_DIR="$SCRATCH_MNT/subdir"
104
105 for ((i = 0; i < 2; i++)); do
106        workout $DIR_NUM ${DIR_LEN[$i]} $PARENT_DIR
107 done
108
109 status=0
110 exit