fstests.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Theodore Ts'o" <tytso@mit.edu>
To: fstests@vger.kernel.org
Cc: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Subject: [PATCH RFC] add support for ntfs and ntfs3 file systems
Date: Wed, 4 Aug 2021 00:19:41 -0400	[thread overview]
Message-ID: <YQoVXWRFGeY19onQ@mit.edu> (raw)

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
---

Here are some patches which add support for testing the fuse ntfs
implementation (shipped in the ntfs-3g package) as well as Paragon
Software's proposed ntfs3 kernel submission.

Context: https://lore.kernel.org/r/YQnHxIU+EAAxIjZA@mit.edu
Sample test run: https://www.kernel.org/pub/linux/kernel/people/tytso/fstests-results/results-ntfs3-2021-08-03.tar.xz

 common/config |  1 +
 common/rc     | 51 ++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 49 insertions(+), 3 deletions(-)

diff --git a/common/config b/common/config
index 005fd50a..80510df2 100644
--- a/common/config
+++ b/common/config
@@ -271,6 +271,7 @@ export MKFS_REISER4_PROG=$(type -P mkfs.reiser4)
 export E2FSCK_PROG=$(type -P e2fsck)
 export TUNE2FS_PROG=$(type -P tune2fs)
 export FSCK_OVERLAY_PROG=$(type -P fsck.overlay)
+export MKFS_NTFS_PROG=$(type -P mkfs.ntfs)
 
 # SELinux adds extra xattrs which can mess up our expected output.
 # So, mount with a context, and they won't be created.
diff --git a/common/rc b/common/rc
index 0fabea45..12e94b1c 100644
--- a/common/rc
+++ b/common/rc
@@ -140,6 +140,10 @@ case "$FSTYP" in
 	 ;;
     pvfs2)
 	;;
+    ntfs)
+	;;
+    ntfs3)
+	;;
     ubifs)
 	[ "$UBIUPDATEVOL_PROG" = "" ] && _fatal "ubiupdatevol not found"
 	;;
@@ -690,6 +694,9 @@ _test_mkfs()
     ext2|ext3|ext4)
 	$MKFS_PROG -t $FSTYP -- -F $MKFS_OPTIONS $* $TEST_DEV
 	;;
+    ntfs|ntfs3)
+	$MKFS_NTFS_PROG $MKFS_OPTIONS $* $TEST_DEV > /dev/null
+	;;
     *)
 	yes | $MKFS_PROG -t $FSTYP -- $MKFS_OPTIONS $* $TEST_DEV
 	;;
@@ -729,6 +736,9 @@ _mkfs_dev()
 	$MKFS_PROG -t $FSTYP -- -f $MKFS_OPTIONS $* \
 		2>$tmp.mkfserr 1>$tmp.mkfsstd
 	;;
+    ntfs|ntfs3)
+        $MKFS_NTFS_PROG $MKFS_OPTIONS $* 2>$tmp.mkfserr 1>$tmp.mkfsstd
+	;;
     *)
 	yes | $MKFS_PROG -t $FSTYP -- $MKFS_OPTIONS $* \
 		2>$tmp.mkfserr 1>$tmp.mkfsstd
@@ -826,6 +836,10 @@ _scratch_mkfs()
 		mkfs_cmd="yes | $MKFS_PROG -t $FSTYP --"
 		mkfs_filter="grep -v -e ^mkfs\.ocfs2"
 		;;
+	ntfs|ntfs3)
+		mkfs_cmd="$MKFS_NTFS_PROG"
+		mkfs_filter="cat"
+		;;
 	*)
 		mkfs_cmd="yes | $MKFS_PROG -t $FSTYP --"
 		mkfs_filter="cat"
@@ -1091,6 +1105,10 @@ _scratch_mkfs_sized()
 	bcachefs)
 		$MKFS_PROG -t $FSTYP -- $MKFS_OPTIONS --fs_size=$fssize --block_size=$blocksize $SCRATCH_DEV
 		;;
+	ntfs|ntfs3)
+		${MKFS_NTFS_PROG} $MKFS_OPTIONS $SCRATCH_DEV \
+			$(expr $blocks / 2)
+		;;
 	*)
 		_notrun "Filesystem $FSTYP not supported in _scratch_mkfs_sized"
 		;;
@@ -1173,6 +1191,9 @@ _scratch_mkfs_blocksized()
 		${MKFS_PROG} -t $FSTYP $MKFS_OPTIONS --block_size=$blocksize \
 								$SCRATCH_DEV
 		;;
+	ntfs|ntfs3)
+		${MKFS_NTFS_PROG} -F $MKFS_OPTIONS -s $blocksize $SCRATCH_DEV
+		;;
 	*)
 		_notrun "Filesystem $FSTYP not supported in _scratch_mkfs_blocksized"
 		;;
@@ -1247,6 +1268,10 @@ _repair_scratch_fs()
 	# want the test to fail:
 	_check_scratch_fs
 	;;
+    ntfs|ntfs3)
+	$FSCK_NTFS_PROG $SCRATCH_DEV
+	return $?
+	;;
     *)
 	local dev=$SCRATCH_DEV
 	local fstyp=$FSTYP
@@ -1294,6 +1319,10 @@ _repair_test_fs()
 			res=$?
 		fi
 		;;
+	ntfs|ntfs3)
+		$FSCK_NTFS_PROG $TEST_DEV > $tmp.repair 2>&1
+		return $?
+		;;
 	*)
 		# Let's hope fsck -y suffices...
 		fsck -t $FSTYP -fy $TEST_DEV >$tmp.repair 2>&1
@@ -1433,8 +1462,11 @@ _fs_type()
     # Fix the filesystem type up here so that the callers don't
     # have to bother with this quirk.
     #
-    _df_device $1 | $AWK_PROG '{ print $2 }' | \
-        sed -e 's/nfs4/nfs/' -e 's/fuse.glusterfs/glusterfs/'
+    local sed_prog="-e s/nfs4/nfs/ -e s/fuse.glusterfs/glusterfs/"
+    if [ $FSTYP = ntfs ]; then
+	sed_prog="$sed_prog -e s/fuseblk/ntfs/"
+    fi
+    _df_device $1 | $AWK_PROG '{ print $2 }' | sed $sed_prog
 }
 
 # return the FS mount options of a mounted device
@@ -2897,6 +2929,9 @@ _is_dev_mounted()
 		exit 1
 	fi
 
+	if [ $fstype = ntfs ]; then
+	    fstype=fuseblk
+	fi
 	findmnt -rncv -S $dev -t $fstype -o TARGET | head -1
 }
 
@@ -3017,11 +3052,15 @@ _pre_fsck_prepare()
 _check_generic_filesystem()
 {
     local device=$1
+    local fsck_type=$2
 
     # If type is set, we're mounted
     local type=`_fs_type $device`
     local ok=1
 
+    if [ -z "$fsck_type" ]; then
+       fsck_type="$FSTYP"
+    fi
     if [ "$type" = "$FSTYP" ]
     then
         # mounted ...
@@ -3029,7 +3068,7 @@ _check_generic_filesystem()
     fi
 
     _pre_fsck_prepare $device
-    fsck -t $FSTYP $FSCK_OPTIONS $device >$tmp.fsck 2>&1
+    fsck -t $fsck_type $FSCK_OPTIONS $device >$tmp.fsck 2>&1
     if [ $? -ne 0 ]
     then
 	_log_err "_check_generic_filesystem: filesystem on $device is inconsistent"
@@ -3150,6 +3189,9 @@ _check_test_fs()
     btrfs)
 	_check_btrfs_filesystem $TEST_DEV
 	;;
+    ntfs|ntfs3)
+	_check_generic_filesystem $TEST_DEV $ntfs
+	;;
     tmpfs)
 	# no way to check consistency for tmpfs
 	;;
@@ -3211,6 +3253,9 @@ _check_scratch_fs()
     btrfs)
 	_check_btrfs_filesystem $device
 	;;
+    ntfs|ntfs3)
+	_check_generic_filesystem $device ntfs
+	;;
     tmpfs)
 	# no way to check consistency for tmpfs
 	;;
-- 
2.31.0


             reply	other threads:[~2021-08-04  4:19 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-04  4:19 Theodore Ts'o [this message]
2021-08-05 19:34 ` [PATCH RFC] add support for ntfs and ntfs3 file systems Ari Sundholm
2021-08-08 14:07 ` Eryu Guan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YQoVXWRFGeY19onQ@mit.edu \
    --to=tytso@mit.edu \
    --cc=almaz.alexandrovich@paragon-software.com \
    --cc=fstests@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).