1 1.9 andvar ## $NetBSD: Makefile,v 1.9 2026/06/01 20:34:17 andvar Exp $ 2 1.1 bouyer ## Notes: 3 1.1 bouyer ## This set of tests creates a dummy directory tree in /tmp and 4 1.1 bouyer ## populates it with several files. The test requires around 1100 5 1.3 tron ## inodes and 6.8MB. The test system needs to run a kernel with 6 1.3 tron ## FFS Endian Independent support (options FFS_EI) to be able to 7 1.3 tron ## perform this test. 8 1.1 bouyer ## 9 1.1 bouyer ## This test verifies that newfs can create filesystems in both bytes 10 1.1 bouyer ## orders. For each byte order it is checked that: 11 1.1 bouyer ## - the kernel understands both filesystems created 12 1.1 bouyer ## - fsck_ffs can convert them from one byte order to the other 13 1.8 rillig ## - dump handles properly the 'nodump' flag, and that restore can 14 1.1 bouyer ## properly restore the filesystem. 15 1.1 bouyer ## 16 1.2 bouyer ## This is derived from work done by Brian Grayson, submitted in PR 6706. 17 1.1 bouyer 18 1.7 christos .include <bsd.own.mk> 19 1.5 lukem 20 1.1 bouyer TMPL=/tmp/ffstemplate 21 1.1 bouyer TMPMP=/tmp/ffsregresstest_mount 22 1.1 bouyer TMPIM=/var/tmp/ffsregresstest.im 23 1.1 bouyer TMPREST=/tmp/restoreregress 24 1.1 bouyer EN?= be 25 1.1 bouyer DIGITS=0 1 2 3 4 5 6 7 8 9 26 1.1 bouyer 27 1.1 bouyer VND?= vnd0 28 1.1 bouyer BVND= /dev/${VND} 29 1.1 bouyer CVND= /dev/r${VND} 30 1.1 bouyer MPART?= a 31 1.1 bouyer .if (${MACHINE_ARCH} == "i386") 32 1.1 bouyer RPART?= d 33 1.1 bouyer .else 34 1.1 bouyer RPART?= c 35 1.1 bouyer .endif 36 1.1 bouyer 37 1.9 andvar # As make is called recursively, and we may cd to ${OBJDIR}, we need to call 38 1.9 andvar # make with some variables propagated. 39 1.1 bouyer SRCDIR?= ${.CURDIR} 40 1.1 bouyer MAKECMD= ${MAKE} -f ${SRCDIR}/Makefile SRCDIR=${SRCDIR} EN=${EN} VND=${VND} MPART=${MPART} RPART=${RPART} 41 1.1 bouyer 42 1.1 bouyer regress: template 43 1.1 bouyer ${MAKECMD} EN=be makeregress 44 1.1 bouyer ${MAKECMD} clean-tmpfs 45 1.1 bouyer ${MAKECMD} EN=le makeregress 46 1.1 bouyer ${MAKECMD} clean 47 1.1 bouyer 48 1.1 bouyer makeregress: tmpfs 49 1.1 bouyer ${MAKECMD} dump 50 1.1 bouyer ${MAKECMD} fsck 51 1.1 bouyer ${MAKECMD} clean-dump; 52 1.1 bouyer 53 1.1 bouyer clean: clean-tmpfs clean-template clean-dump 54 1.1 bouyer clean-dump: 55 1.1 bouyer @echo "*** Cleaning up ${TMPREST}." 56 1.1 bouyer -rm -rf ${TMPREST} 57 1.1 bouyer clean-tmpfs: 58 1.1 bouyer @echo "*** Cleaning up ${TMPMP}." 59 1.1 bouyer -umount ${TMPMP} 60 1.1 bouyer -vnconfig -u ${BVND}${RPART} 61 1.1 bouyer -rm -rf ${TMPMP} ${TMPIM} 62 1.1 bouyer clean-template: 63 1.1 bouyer @echo "*** Cleaning up ${TMPL}." 64 1.1 bouyer -rm -rf ${TMPL} 65 1.1 bouyer 66 1.1 bouyer cmp: 67 1.1 bouyer diff -r -q ${TMPL} ${TMPMP} 68 1.1 bouyer 69 1.1 bouyer dump: 70 1.1 bouyer @echo "*** Testing dump nodump flag support." 71 1.1 bouyer @# First of all, estimate the size of a dump of just the tmpfs. 72 1.5 lukem ${HOST_SH} ${SRCDIR}/estimatecompare 2572 -S -h9 -0 ${CVND}${MPART} 73 1.1 bouyer 74 1.1 bouyer @# Now estimate the size, after honoring the nodump flag. 75 1.5 lukem ${HOST_SH} ${SRCDIR}/estimatecompare 347 -S -h0 -0 ${CVND}${MPART} 76 1.1 bouyer @echo "*** Testing dump/restore support" 77 1.1 bouyer mkdir ${TMPREST} 78 1.1 bouyer dump -0 -h9 -B10000 -f - ${CVND}${MPART} | \ 79 1.1 bouyer (cd ${TMPREST}; restore -rf -) 80 1.1 bouyer @#restore should have created a restoresymtable file 81 1.1 bouyer rm ${TMPREST}/restoresymtable 82 1.1 bouyer diff -r -q ${TMPL} ${TMPREST} 83 1.1 bouyer 84 1.1 bouyer fsck: 85 1.1 bouyer @echo "*** checking fsck_ffs endian conversion." 86 1.1 bouyer umount ${BVND}${MPART} 87 1.1 bouyer .if (${EN} == le) 88 1.1 bouyer fsck_ffs -B be -y ${CVND}${MPART} 89 1.1 bouyer mount -o async ${BVND}${MPART} ${TMPMP} 90 1.1 bouyer ${MAKECMD} cmp 91 1.1 bouyer umount ${BVND}${MPART} 92 1.1 bouyer fsck_ffs -B le -y ${CVND}${MPART} 93 1.1 bouyer mount -o async ${BVND}${MPART} ${TMPMP} 94 1.1 bouyer ${MAKECMD} cmp 95 1.1 bouyer .else 96 1.1 bouyer fsck_ffs -B le -y ${CVND}${MPART} 97 1.1 bouyer mount -o async ${BVND}${MPART} ${TMPMP} 98 1.1 bouyer ${MAKECMD} cmp 99 1.1 bouyer umount ${BVND}${MPART} 100 1.1 bouyer fsck_ffs -B be -y ${CVND}${MPART} 101 1.1 bouyer mount -o async ${BVND}${MPART} ${TMPMP} 102 1.1 bouyer ${MAKECMD} cmp 103 1.1 bouyer .endif 104 1.1 bouyer 105 1.1 bouyer tmpfs: 106 1.1 bouyer @echo "*** Creating a dummy directory tree at ${TMPMP} monted on" \ 107 1.1 bouyer "${TMPIM}, ${EN} byte order." 108 1.1 bouyer dd if=/dev/zero of=${TMPIM} count=5860 109 1.1 bouyer vnconfig -v ${BVND}${RPART} ${TMPIM} 110 1.4 tron disklabel -f ${SRCDIR}/disktab -rw ${VND} floppy288 111 1.1 bouyer newfs -B ${EN} -i 500 -b 8192 -f 1024 ${CVND}${MPART} 112 1.1 bouyer mkdir ${TMPMP} 113 1.1 bouyer mount -o async ${BVND}${MPART} ${TMPMP} 114 1.1 bouyer # Arg, cp will give an error if the symlink is copied before its target 115 1.1 bouyer -cp -Rp ${TMPL}/* ${TMPMP} 116 1.1 bouyer ${MAKECMD} cmp 117 1.1 bouyer 118 1.1 bouyer template: 119 1.1 bouyer mkdir ${TMPL} 120 1.1 bouyer @# Create a directory with a 10K file, with the file marked nodump. 121 1.1 bouyer mkdir ${TMPL}/nodumpfile 122 1.1 bouyer jot -r -c -s '' -n 10240 > ${TMPL}/nodumpfile/10k 123 1.1 bouyer chflags nodump ${TMPL}/nodumpfile/10k 124 1.1 bouyer @# And some ordinary 10k files. 125 1.1 bouyer mkdir ${TMPL}/dumpfile 126 1.1 bouyer TMPFS_DUMP=${TMPL}/dumpfile/dumpfile.10k; \ 127 1.1 bouyer for f in ${DIGITS}; do \ 128 1.1 bouyer jot -r -c -s '' -n 10240 > $$TMPFS_DUMP.$$f; done; 129 1.1 bouyer @# A subdir with a short and a long symbolic link in it 130 1.1 bouyer mkdir ${TMPL}/dumpfile/subdir 131 1.1 bouyer ln -s ../dumpfile.10k.0 ${TMPL}/dumpfile/subdir/link; 132 1.1 bouyer ln -s ../dumpfile.10k.1 ${TMPL}/dumpfile/subdir/really_really_really_really_really_really_long_name_to_use_up_space.link; 133 1.1 bouyer @# And now the same files, but in a dir marked nodump: 134 1.1 bouyer mkdir ${TMPL}/nodumpdir 135 1.1 bouyer chflags nodump ${TMPL}/nodumpdir 136 1.1 bouyer TMPFS_1=${TMPL}/nodumpdir/10k; \ 137 1.1 bouyer for f in ${DIGITS}; do \ 138 1.1 bouyer jot -r -c -s '' -n 10240 > $$TMPFS_1.$$f; \ 139 1.1 bouyer done 140 1.1 bouyer 141 1.1 bouyer @# Also create a large directory that uses more than one direct block 142 1.1 bouyer @# (so it has to be larger than 8K). 143 1.1 bouyer @# Make sure one entry is for a deleted file, also. 144 1.1 bouyer mkdir ${TMPL}/2blkdir 145 1.1 bouyer TMPFS_1=${TMPL}/2blkdir; \ 146 1.1 bouyer jot -r -c -s '' -n 10 > $$TMPFS_1/10b; \ 147 1.1 bouyer for f in ${DIGITS}; do for g in ${DIGITS}; do \ 148 1.1 bouyer jot -r -c -s '' -n 10 > \ 149 1.1 bouyer $$TMPFS_1/really_really_really_really_really_really_long_name_to_use_up_space_$$f$$g ;\ 150 1.1 bouyer done; done; \ 151 1.1 bouyer rm $$TMPFS_1/10b 152 1.1 bouyer 153 1.1 bouyer @# Now create a directory with at least one indirect block. 154 1.1 bouyer @# On a FS with 8K blocks, we need at least 1 + 12*8192 bytes, or 155 1.1 bouyer @# 98305 bytes, in the directory. 1000 files does the trick, 156 1.1 bouyer @# with the long filename below. 157 1.1 bouyer mkdir ${TMPL}/indirblk 158 1.1 bouyer chflags nodump ${TMPL}/indirblk 159 1.1 bouyer TMPFS_1=${TMPL}/indirblk; \ 160 1.1 bouyer jot -r -c -s '' -n 10 > $$TMPFS_1/10b; \ 161 1.1 bouyer for e in 0; do\ 162 1.1 bouyer for f in ${DIGITS}; do for g in ${DIGITS}; do for h in ${DIGITS}; do \ 163 1.1 bouyer jot -r -c -s '' -n 10 > \ 164 1.1 bouyer $$TMPFS_1/really_really_really_really_really_really_long_name_to_use_up_dir_entry_space$$e$$f$$g$$h ;\ 165 1.1 bouyer done; done; done; done; \ 166 1.1 bouyer rm $$TMPFS_1/10b 167 1.1 bouyer @# ^--- As before, make sure at least one direntry is a deleted file. 168