git: b1f72dd2a9a5 - main - tunefs: Don't combine GEOM journaling with SU

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Sat, 21 Mar 2026 07:22:09 UTC
The branch main has been updated by des:

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

commit b1f72dd2a9a5e69a310b9e76b55f16cff433b8da
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-03-21 07:21:33 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-03-21 07:21:45 +0000

    tunefs: Don't combine GEOM journaling with SU
    
    GEOM journaling shouldn't be used at the same time as soft updates, so
    don't enable one if the other is already in use.
    
    MFC after:      1 week
    PR:             293896
    Reviewed by:    mckusick
    Differential Revision:  https://reviews.freebsd.org/D56002
---
 sbin/tunefs/tunefs.8 |  8 ++++++--
 sbin/tunefs/tunefs.c | 17 +++++++++++++----
 2 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/sbin/tunefs/tunefs.8 b/sbin/tunefs/tunefs.8
index 0fb11041d97d..8c2d0bbf5d1d 100644
--- a/sbin/tunefs/tunefs.8
+++ b/sbin/tunefs/tunefs.8
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd November 17, 2023
+.Dd March 20, 2026
 .Dt TUNEFS 8
 .Os
 .Sh NAME
@@ -92,6 +92,8 @@ this parameter should be set higher.
 Specify the expected average file size.
 .It Fl j Cm enable | disable
 Turn on/off soft updates journaling.
+Enabling soft updates journaling implies enabling soft updates and is
+incompatible with GEOM journaling.
 .Pp
 Enabling journaling reduces the time spent by
 .Xr fsck_ffs 8
@@ -128,7 +130,8 @@ is running.
 Running a full fsck on a UFS filesystem is the equivalent of
 running a scrub on a ZFS filesystem.
 .It Fl J Cm enable | disable
-Turn on/off gjournal flag.
+Turn on/off GEOM journaling.
+GEOM journaling is incompatible with soft updates.
 .It Fl k Ar held-for-metadata-blocks
 Set the amount of space to be held for metadata blocks.
 When set, the file system preference routines will try to save
@@ -171,6 +174,7 @@ been deleted to get under the higher threshold.
 Turn on/off the administrative NFSv4 ACL enable flag.
 .It Fl n Cm enable | disable
 Turn on/off soft updates.
+Soft updates are incompatible with GEOM journaling.
 .It Fl o Cm space | time
 The file system can either try to minimize the time spent
 allocating blocks, or it can attempt to minimize the space
diff --git a/sbin/tunefs/tunefs.c b/sbin/tunefs/tunefs.c
index 6f6df8446cd9..d5ef366e8221 100644
--- a/sbin/tunefs/tunefs.c
+++ b/sbin/tunefs/tunefs.c
@@ -358,6 +358,9 @@ main(int argc, char *argv[])
 			if ((sblock.fs_flags & (FS_DOSOFTDEP | FS_SUJ)) ==
 			    (FS_DOSOFTDEP | FS_SUJ)) {
 				warnx("%s remains unchanged as enabled", name);
+			} else if (sblock.fs_flags & FS_GJOURNAL) {
+				warnx("%s cannot be enabled while GEOM "
+				    "journaling is enabled", name);
 			} else if (sblock.fs_clean == 0) {
 				warnx("%s cannot be enabled until fsck is run",
 				    name);
@@ -386,6 +389,9 @@ main(int argc, char *argv[])
 		if (strcmp(Jvalue, "enable") == 0) {
 			if (sblock.fs_flags & FS_GJOURNAL) {
 				warnx("%s remains unchanged as enabled", name);
+			} if (sblock.fs_flags & FS_DOSOFTDEP) {
+				warnx("%s cannot be enabled while soft "
+				    "updates are enabled", name);
 			} else {
 				sblock.fs_flags |= FS_GJOURNAL;
 				warnx("%s set", name);
@@ -403,9 +409,9 @@ main(int argc, char *argv[])
 	}
 	if (kflag) {
 		name = "space to hold for metadata blocks";
-		if (sblock.fs_metaspace == kvalue)
+		if (sblock.fs_metaspace == kvalue) {
 			warnx("%s remains unchanged as %d", name, kvalue);
-		else {
+		} else {
 			kvalue = blknum(&sblock, kvalue);
 			if (kvalue > sblock.fs_fpg / 2) {
 				kvalue = blknum(&sblock, sblock.fs_fpg / 2);
@@ -477,9 +483,12 @@ main(int argc, char *argv[])
 	if (nflag) {
  		name = "soft updates";
  		if (strcmp(nvalue, "enable") == 0) {
-			if (sblock.fs_flags & FS_DOSOFTDEP)
+			if (sblock.fs_flags & FS_DOSOFTDEP) {
 				warnx("%s remains unchanged as enabled", name);
-			else if (sblock.fs_clean == 0) {
+			} else if (sblock.fs_flags & FS_GJOURNAL) {
+				warnx("%s cannot be enabled while GEOM "
+				    "journaling is enabled", name);
+			} else if (sblock.fs_clean == 0) {
 				warnx("%s cannot be enabled until fsck is run",
 				    name);
 			} else {