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
This commit is contained in:
Dag-Erling Smørgrav
2026-03-21 08:21:33 +01:00
parent e30fcdaae2
commit b1f72dd2a9
2 changed files with 19 additions and 6 deletions
+6 -2
View File
@@ -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
+13 -4
View File
@@ -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 {