| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. |
| # |
| # FS QA Test No. 032 |
| # |
| # cross check mkfs detection of foreign filesystems |
| # |
| . ./common/preamble |
| _begin_fstest mkfs auto quick |
| |
| # Import common functions. |
| . ./common/filter |
| |
| # real QA test starts here |
| _supported_fs xfs btrfs |
| |
| _require_scratch_nocheck |
| _require_no_large_scratch_dev |
| # not all the FS support zoned block device |
| _require_non_zoned_device "${SCRATCH_DEV}" |
| |
| # mkfs.btrfs did not have overwrite detection at first |
| if [ "$FSTYP" == "btrfs" ]; then |
| grep -q 'force overwrite' `echo $MKFS_BTRFS_PROG | awk '{print $1}'` || \ |
| _notrun "Installed mkfs.btrfs does not support -f option" |
| fi |
| |
| echo "Silence is golden." |
| for fs in `echo ${MKFS_PROG}.* | sed -e "s:${MKFS_PROG}.::g"` |
| do |
| preop="" # for special input needs |
| preargs="" # for any special pre-device options |
| postargs="" # for any special post-device options |
| |
| # minix, msdos and vfat mkfs fails for large devices, restrict to 2000 blocks |
| [ $fs = minix ] && postargs=2000 |
| [ $fs = msdos ] && postargs=2000 |
| [ $fs = vfat ] && postargs=2000 |
| # these folks prompt before writing |
| [ $fs = jfs ] && preop="echo Y |" |
| [ $fs = gfs ] && preop="echo y |" && preargs="-p lock_nolock -j 1" |
| [ $fs = gfs2 ] && preop="echo y |" && preargs="-p lock_nolock -j 1" |
| [ $fs = reiserfs ] && preop="echo y |" && preargs="-f" |
| [ $fs = reiser4 ] && preop="echo y |" && preargs="-f" |
| # cramfs mkfs requires a directory argument |
| [ $fs = cramfs ] && preargs=/proc/fs |
| [ $fs = ext2 ] && preargs="-F" |
| [ $fs = ext3 ] && preargs="-F" |
| [ $fs = ext4 ] && preargs="-F" |
| [ $fs = ext4dev ] && preargs="-F" |
| # jffs2 mkfs requires '-r $directory' and '-o $image' |
| [ $fs = jffs2 ] && preargs="-r /proc/fs -o" |
| |
| # overwite the first few Kb - should blow away superblocks |
| $here/src/devzero -n 20 $SCRATCH_DEV >/dev/null |
| |
| # create a filesystem of this type |
| echo "=== Creating $fs filesystem..." >>$seqres.full |
| echo " ( $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs )" >>$seqres.full |
| eval $preop mkfs -t $fs $preargs $SCRATCH_DEV $postargs >>$seqres.full 2>&1 |
| |
| if [ $? -eq 0 ] ; then |
| # next, ensure we don't overwrite it |
| # jffs2 mkfs doesn't check overwrite case |
| [ $fs = jffs2 ] && continue |
| |
| echo "=== Attempting $FSTYP overwrite of $fs..." >>$seqres.full |
| ${MKFS_PROG} -t $FSTYP $SCRATCH_DEV >>$seqres.full 2>&1 |
| |
| [ $? -eq 0 ] && echo "Failed - overwrote fs type ${fs}!" |
| else |
| echo "mkfs of type ${fs} failed" >>$seqres.full |
| fi |
| done |
| |
| # success, all done |
| status=0 |
| exit |