git: 5c7ba6bdf83f - main - Fix for tunefs(8) unable to add a UFS/FFS soft update journal.

From: Kirk McKusick <mckusick_at_FreeBSD.org>
Date: Sat, 12 Nov 2022 23:37:48 UTC
The branch main has been updated by mckusick:

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

commit 5c7ba6bdf83fda82cce70f384e2ec8218f13002e
Author:     Kirk McKusick <mckusick@FreeBSD.org>
AuthorDate: 2022-11-12 23:36:07 +0000
Commit:     Kirk McKusick <mckusick@FreeBSD.org>
CommitDate: 2022-11-12 23:37:27 +0000

    Fix for tunefs(8) unable to add a UFS/FFS soft update journal.
    
    The reported bug is UFS: bad file descriptor: soft update journaling
    can not be enabled on some FreeBSD-provided disk images – failed
    to write updated cg.
    
    The UFS library (libufs(3)) failed to reopen its disk descriptor
    when first attempting to update a cylinder group. The error only
    occurred when trying to add journaling to a filesystem whose first
    cylinder group was too full to hold the journal.
    
    PR:           259090
    MFC after:    1 week
    Sponsored by: The FreeBSD Foundation
---
 lib/libufs/cgroup.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lib/libufs/cgroup.c b/lib/libufs/cgroup.c
index 90b28eadad2c..2058d16e9b6d 100644
--- a/lib/libufs/cgroup.c
+++ b/lib/libufs/cgroup.c
@@ -268,6 +268,10 @@ cgwrite1(struct uufsd *disk, int cg)
 	static char errmsg[BUFSIZ];
 
 	if (cg == disk->d_cg.cg_cgx) {
+		if (ufs_disk_write(disk) == -1) {
+			ERROR(disk, "failed to open disk for writing");
+			return (-1);
+		}
 		if (cgput(disk->d_fd, &disk->d_fs, &disk->d_cg) == 0)
 			return (0);
 		ERROR(disk, NULL);