[PATCH] generic/740: set env for mkfs.exfat and mkfs.ntfs

David Timber <[email protected]> Wed, 17 Jun 2026 01:57:31 +0900
Newsgroups org.kernel.vger.fstests
Message-ID <[email protected]>
Foreign filesystem detection is added in exfatprogs version 1.4.1. To
maintain backward compatibility, mkfs.exfat refuses to format the device
only when it's run from terminal with a tty associated to it.

This is similar to how e2fsprogs work around the issue. However,
with exfatprogs, this behaviour can be overridden with the special
environment variable EXFAT_TTY_OVERRIDE to simulate shell invocation by
user.

mkfs.ntfs from NTFS-3G userland package refuses to format the target
if it's backed by a "real" device but not a partition to maintain
compatibility with Windows. When formatting the scratch device in NTFS
for testing, this behaviour has to be overridden so that any type of
blockdev can be used as a scratch device.

Signed-off-by: David Timber <[email protected]>
---
 tests/generic/740 | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/tests/generic/740 b/tests/generic/740
index ce55200f..89822480 100755
--- a/tests/generic/740
+++ b/tests/generic/740
@@ -28,6 +28,20 @@ _require_block_device "${SCRATCH_DEV}"
 # not all the FS support zoned block device
 _require_non_zoned_device "${SCRATCH_DEV}"
 
+mkfs_preop=""
+mkfs_preargs=""
+mkfs_postargs=""
+
+case "$FSTYP" in
+	exfat)
+		# Some fsprogs were slow to implement foreign fs detection.
+		# For backward compatibility, mkfs.exfat refuses to format only
+		# when run from a tty. This env var should override the
+		# behaviour if supported.
+		mkfs_preop="EXFAT_TTY_OVERRIDE=1"
+		;;
+esac
+
 echo "Silence is golden."
 for fs in `echo ${MKFS_PROG}.* | sed -e "s:${MKFS_PROG}.::g"`
 do
@@ -60,8 +74,10 @@ do
 		postargs=2000
 		;;
 	ntfs)
-		# "quick" format that doesn't zero the entire device
-		postargs="--quick"
+		# "quick" format that doesn't zero the entire device. Use -F so
+		# that NTFS-3G mkfs formats the volume even if the scratch
+		# blockdev is not a partition.
+		postargs="-QF"
 		;;
 	reiser4)
 		preop="echo y |"
@@ -83,7 +99,7 @@ do
 		# next, ensure we don't overwrite it
 
 		echo "=== Attempting $FSTYP overwrite of $fs..." >>$seqres.full
-		${MKFS_PROG} -t $FSTYP $SCRATCH_DEV >>$seqres.full 2>&1
+		eval $mkfs_preop ${MKFS_PROG} -t $FSTYP $mkfs_preargs $SCRATCH_DEV $mkfs_postargs >>$seqres.full 2>&1
 
 		[ $? -eq 0 ] && echo "Failed - overwrote fs type ${fs}!"
 	else
-- 
2.54.0