1#!/bin/sh 2 3# 4# SPDX-License-Identifier: BSD-2-Clause 5# 6# Copyright (c) 2021 Peter Holm 7# 8# Redistribution and use in source and binary forms, with or without 9# modification, are permitted provided that the following conditions 10# are met: 11# 1. Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# 2. Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in the 15# documentation and/or other materials provided with the distribution. 16# 17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27# SUCH DAMAGE. 28# 29 30# Rename(2) test with msdosfs(4) 31# Test scenario by kib@ 32 33. ../default.cfg 34[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1 35 36[ -x /sbin/mount_msdosfs ] || exit 0 37dir=/tmp 38odir=`pwd` 39cd $dir 40cat > /tmp/msdos14.c <<EOF 41/* $Id: rename.c,v 1.2 2021/08/22 15:35:38 kostik Exp kostik $ */ 42 43#include <sys/stat.h> 44#include <err.h> 45#include <fcntl.h> 46#include <inttypes.h> 47#include <stdint.h> 48#include <stdio.h> 49#include <unistd.h> 50 51int 52main(void) 53{ 54 struct stat sb; 55 uint64_t x; 56 int error, fd; 57 char from[64], to[64]; 58 59 for (x = 0;; x++) { 60 snprintf(from, sizeof(from), "x.%" PRIu64 ".from", x); 61 snprintf(to, sizeof(to), "x.%" PRIu64 ".to", x); 62 63 fd = open(from, O_CREAT | O_TRUNC | O_EXCL, 0666); 64 if (fd == -1) 65 err(1, "open %s", from); 66 close(fd); 67 error = rename(from, to); 68 if (error == -1) 69 err(1, "rename %s %s", from, to); 70 error = stat(to, &sb); 71 if (error == -1) 72 err(1, "stat %s", to); 73 error = unlink(to); 74 if (error == -1) 75 err(1, "unlink %s", to); 76 } 77} 78 79EOF 80cc -o msdos14 -Wall -Wextra -O2 msdos14.c || exit 1 81rm -f msdos14.c 82cd $odir 83log=/tmp/msdos14sh..log 84mount | grep "$mntpoint" | grep -q md$mdstart && umount -f $mntpoint 85mdconfig -l | grep -q $mdstart && mdconfig -d -u $mdstart 86 87set -e 88mdconfig -a -t swap -s 4g -u $mdstart 89gpart create -s bsd md$mdstart > /dev/null 90gpart add -t freebsd-ufs md$mdstart > /dev/null 91part=a 92newfs_msdos -b 1024 /dev/md${mdstart}$part > /dev/null 93mount -t msdosfs /dev/md${mdstart}$part $mntpoint 94set +e 95 96cp /tmp/msdos14 $mntpoint 97cd $mntpoint 98 99(cd $odir/../testcases/swap; ./swap -t 5m -i 20 -l 100) > /dev/null & 100sleep 2 101timeout 5m ./msdos14 102while pkill swap; do :; done 103wait 104cd $odir 105 106while mount | grep "$mntpoint" | grep -q md$mdstart; do 107 umount $mntpoint || sleep 1 108done 109fsck -t msdosfs -y /dev/md${mdstart}$part > $log 2>&1 110if egrep -q "BAD|INCONSISTENCY|MODIFIED" $log; then 111 echo "fsck issues:" 112 cat $log 113 s=1 114 115 mount -t msdosfs /dev/md${mdstart}$part $mntpoint || exit 1 116 ls -lR $mntpoint 117 umount $mntpoint 118fi 119mdconfig -d -u $mdstart 120rm /tmp/msdos14 $log 121exit $s 122