git: 0add00229d54 - stable/13 - dumpfs(8): add option to only print superblock information

From: Robert Wing <rew_at_FreeBSD.org>
Date: Wed, 23 Feb 2022 18:29:23 UTC
The branch stable/13 has been updated by rew:

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

commit 0add00229d540ef8a98b38594ffbb8fc0dbc292c
Author:     Robert Wing <rew@FreeBSD.org>
AuthorDate: 2021-07-02 22:18:17 +0000
Commit:     Robert Wing <rew@FreeBSD.org>
CommitDate: 2022-02-23 18:27:27 +0000

    dumpfs(8): add option to only print superblock information
    
    Add an option to dumpfs, `-s`, that only prints the super block information.
    
    Reviewed by:    chs, imp
    Differential Revision:  https://reviews.freebsd.org/D30881
    
    (cherry picked from commit dc3548453689b30ad712e4391a99d3e7df0cad40)
---
 sbin/dumpfs/dumpfs.8 | 12 +++++++++---
 sbin/dumpfs/dumpfs.c | 17 +++++++++++------
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/sbin/dumpfs/dumpfs.8 b/sbin/dumpfs/dumpfs.8
index 5938282cc257..ec5b12550447 100644
--- a/sbin/dumpfs/dumpfs.8
+++ b/sbin/dumpfs/dumpfs.8
@@ -28,7 +28,7 @@
 .\"     @(#)dumpfs.8	8.1 (Berkeley) 6/5/93
 .\" $FreeBSD$
 .\"
-.Dd May 16, 2013
+.Dd July 2, 2021
 .Dt DUMPFS 8
 .Os
 .Sh NAME
@@ -39,6 +39,7 @@
 .Op Fl f
 .Op Fl l
 .Op Fl m
+.Op Fl s
 .Ar filesys | device
 .Sh DESCRIPTION
 The
@@ -46,9 +47,10 @@ The
 utility prints out the UFS super block and cylinder group information
 for the file system or special device specified, unless the
 .Fl f ,
-.Fl l
+.Fl l ,
+.Fl m ,
 or
-.Fl m
+.Fl s
 flag is specified.
 The listing is very long and detailed.
 This
@@ -97,6 +99,10 @@ The
 .Fl r
 flag is needed if the filesystem uses
 .Xr gjournal 8 .
+.Pp
+If
+.Fl s
+is specified, only the super block information is printed.
 .Sh SEE ALSO
 .Xr fs 5 ,
 .Xr fsck 8 ,
diff --git a/sbin/dumpfs/dumpfs.c b/sbin/dumpfs/dumpfs.c
index 3ac59ccc0875..7c43cf4489a8 100644
--- a/sbin/dumpfs/dumpfs.c
+++ b/sbin/dumpfs/dumpfs.c
@@ -81,7 +81,7 @@ static const char rcsid[] =
 
 static struct uufsd disk;
 
-static int	dumpfs(const char *);
+static int	dumpfs(const char *, int);
 static int	dumpfsid(void);
 static int	dumpcg(void);
 static int	dumpfreespace(const char *, int);
@@ -96,11 +96,11 @@ int
 main(int argc, char *argv[])
 {
 	const char *name;
-	int ch, dofreespace, domarshal, dolabel, eval;
+	int ch, dofreespace, domarshal, dolabel, dosb, eval;
 
-	dofreespace = domarshal = dolabel = eval = 0;
+	dofreespace = domarshal = dolabel = dosb = eval = 0;
 
-	while ((ch = getopt(argc, argv, "lfm")) != -1) {
+	while ((ch = getopt(argc, argv, "lfms")) != -1) {
 		switch (ch) {
 		case 'f':
 			dofreespace++;
@@ -111,6 +111,9 @@ main(int argc, char *argv[])
 		case 'l':
 			dolabel = 1;
 			break;
+		case 's':
+			dosb = 1;
+			break;
 		case '?':
 		default:
 			usage();
@@ -139,7 +142,7 @@ main(int argc, char *argv[])
 		else if (dolabel)
 			eval |= dumpfsid();
 		else
-			eval |= dumpfs(name);
+			eval |= dumpfs(name, dosb);
 		ufs_disk_close(&disk);
 	}
 	exit(eval);
@@ -154,7 +157,7 @@ dumpfsid(void)
 }
 
 static int
-dumpfs(const char *name)
+dumpfs(const char *name, int dosb)
 {
 	time_t fstime, fsmtime;
 	int64_t fssize;
@@ -324,6 +327,8 @@ dumpfs(const char *name)
 		printf("blocks in last group %ld\n\n",
 		    (long)((fssize % afs.fs_fpg) / afs.fs_frag));
 	}
+	if (dosb)
+		return (0);
 	while ((i = cgread(&disk)) != 0) {
 		if (i == -1 || dumpcg())
 			goto err;