git: ad64308af9e3 - stable/13 - newfs: Add an option to disable soft updates

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Sat, 31 Jan 2026 17:50:25 UTC
The branch stable/13 has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=ad64308af9e3b61cc83acd6645ad608e63e97406

commit ad64308af9e3b61cc83acd6645ad608e63e97406
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-01-11 02:34:00 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-01-31 17:50:18 +0000

    newfs: Add an option to disable soft updates
    
    A previous commit turned soft updates on by default for UFS2 without
    providing a way to turn them off.  This corrects that by adding a new -u
    flag which forces soft updates (and soft updates journaling) off.
    
    MFC after:      1 week
    Sponsored by:   Klara, Inc.
    Sponsored by:   NetApp, Inc.
    Fixes:          61dece6d27fb ("Enable soft updates by default for UFS2 filesystems.")
    Reviewed by:    mckusick
    Differential Revision:  https://reviews.freebsd.org/D54576
    
    (cherry picked from commit 68562f8145e8154e7e276897a546995f0d8f3428)
    
    newfs: Add -u to getopt string
    
    Fixes:          68562f8145e8 ("newfs: Add an option to disable soft updates")
    (cherry picked from commit 717ae163919e48f000b94f85dc188e0d92261929)
---
 sbin/newfs/newfs.8 | 24 ++++++++++++++++++------
 sbin/newfs/newfs.c | 11 +++++++----
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/sbin/newfs/newfs.8 b/sbin/newfs/newfs.8
index 0b9f66a7e76d..de69cc30dc16 100644
--- a/sbin/newfs/newfs.8
+++ b/sbin/newfs/newfs.8
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd May 18, 2024
+.Dd January 7, 2026
 .Dt NEWFS 8
 .Os
 .Sh NAME
@@ -33,7 +33,7 @@
 .Nd construct a new UFS1/UFS2 file system
 .Sh SYNOPSIS
 .Nm
-.Op Fl EJNUjlnt
+.Op Fl EJNUjlntu
 .Op Fl L Ar volname
 .Op Fl O Ar filesystem-type
 .Op Fl S Ar sector-size
@@ -98,10 +98,20 @@ The default format is UFS2.
 For backward compatibility.
 .It Fl U
 Enable soft updates on the new file system.
-Soft updates are enabled by default for UFS2 format file systems.
-Use
-.Xr tunefs 8
-to disable soft updates if they are not wanted.
+If neither
+.Fl U
+nor
+.Fl u
+is specified, soft updates are enabled by default for UFS2 format file
+systems and disabled otherwise.
+.It Fl u
+Do not enable soft updates on the new file system.
+If neither
+.Fl U
+nor
+.Fl u
+is specified, soft updates are enabled by default for UFS2 format file
+systems and disabled otherwise.
 .It Fl a Ar maxcontig
 Specify the maximum number of contiguous blocks that will be
 laid out before forcing a rotational delay.
@@ -166,6 +176,8 @@ One inode is required for each distinct file, so this value effectively
 specifies the average file size on the file system.
 .It Fl j
 Enable soft updates journaling on the new file system.
+This implies
+.Fl U .
 This flag is implemented by running the
 .Xr tunefs 8
 utility found in the user's
diff --git a/sbin/newfs/newfs.c b/sbin/newfs/newfs.c
index 6e69a6c5437b..27b6c079bc0f 100644
--- a/sbin/newfs/newfs.c
+++ b/sbin/newfs/newfs.c
@@ -86,7 +86,7 @@ int	Lflag;			/* add a volume label */
 int	Nflag;			/* run without writing file system */
 int	Oflag = 2;		/* file system format (1 => UFS1, 2 => UFS2) */
 int	Rflag;			/* regression test */
-int	Uflag;			/* enable soft updates for file system */
+int	Uflag = -1;		/* enable soft updates for file system */
 int	jflag;			/* enable soft updates journaling for filesys */
 int	Xflag = 0;		/* exit in middle of newfs for testing */
 int	Jflag;			/* enable gjournal for file system */
@@ -139,7 +139,7 @@ main(int argc, char *argv[])
 	part_name = 'c';
 	reserved = 0;
 	while ((ch = getopt(argc, argv,
-	    "EJL:NO:RS:T:UXa:b:c:d:e:f:g:h:i:jk:lm:no:p:r:s:t")) != -1)
+	    "EJL:NO:RS:T:UXa:b:c:d:e:f:g:h:i:jk:lm:no:p:r:s:tu")) != -1)
 		switch (ch) {
 		case 'E':
 			Eflag = 1;
@@ -188,6 +188,9 @@ main(int argc, char *argv[])
 		case 'U':
 			Uflag = 1;
 			break;
+		case 'u':
+			Uflag = 0;
+			break;
 		case 'X':
 			Xflag++;
 			break;
@@ -392,8 +395,8 @@ main(int argc, char *argv[])
 		opt = FS_OPTSPACE;
 	}
 	/* Use soft updates by default for UFS2 and above */
-	if (Oflag > 1)
-		Uflag = 1;
+	if (Uflag < 0)
+		Uflag = Oflag > 1;
 	realsectorsize = sectorsize;
 	if (sectorsize != DEV_BSIZE) {		/* XXX */
 		int secperblk = sectorsize / DEV_BSIZE;