svn commit: r367750 - in stable/12/sbin: fsirand growfs tunefs

Kirk McKusick mckusick at FreeBSD.org
Tue Nov 17 05:59:56 UTC 2020


Author: mckusick
Date: Tue Nov 17 05:59:55 2020
New Revision: 367750
URL: https://svnweb.freebsd.org/changeset/base/367750

Log:
  MFC of 367035.
  
  Require clean superblock for tunefs, growfs, and fsirand
  
  Sponsored by: Netflix

Modified:
  stable/12/sbin/fsirand/fsirand.c
  stable/12/sbin/growfs/growfs.c
  stable/12/sbin/tunefs/tunefs.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sbin/fsirand/fsirand.c
==============================================================================
--- stable/12/sbin/fsirand/fsirand.c	Tue Nov 17 05:48:00 2020	(r367749)
+++ stable/12/sbin/fsirand/fsirand.c	Tue Nov 17 05:59:55 2020	(r367750)
@@ -136,6 +136,12 @@ fsirand(char *device)
 			return (1);
 		}
 	}
+	/*
+	 * Check for unclean filesystem.
+	 */
+	if (sblock->fs_clean == 0 ||
+	    (sblock->fs_flags & (FS_UNCLEAN | FS_NEEDSFSCK)) != 0)
+		errx(1, "%s is not clean - run fsck.\n", device);
 
 	if (sblock->fs_magic == FS_UFS1_MAGIC &&
 	    sblock->fs_old_inodefmt < FS_44INODEFMT) {

Modified: stable/12/sbin/growfs/growfs.c
==============================================================================
--- stable/12/sbin/growfs/growfs.c	Tue Nov 17 05:48:00 2020	(r367749)
+++ stable/12/sbin/growfs/growfs.c	Tue Nov 17 05:59:55 2020	(r367750)
@@ -1442,6 +1442,12 @@ main(int argc, char **argv)
 			errc(1, ret, "unable to read superblock");
 		}
 	}
+	/*
+	 * Check for unclean filesystem.
+	 */
+	if (fs->fs_clean == 0 ||
+	    (fs->fs_flags & (FS_UNCLEAN | FS_NEEDSFSCK)) != 0)
+		errx(1, "%s is not clean - run fsck.\n", *argv);
 	memcpy(&osblock, fs, fs->fs_sbsize);
 	free(fs);
 	memcpy((void *)&fsun1, (void *)&fsun2, osblock.fs_sbsize);

Modified: stable/12/sbin/tunefs/tunefs.c
==============================================================================
--- stable/12/sbin/tunefs/tunefs.c	Tue Nov 17 05:48:00 2020	(r367749)
+++ stable/12/sbin/tunefs/tunefs.c	Tue Nov 17 05:59:55 2020	(r367750)
@@ -115,12 +115,12 @@ main(int argc, char *argv[])
 		switch (ch) {
 
 		case 'A':
-			found_arg = 1;
+			found_arg++;
 			Aflag++;
 			break;
 
 		case 'a':
-			found_arg = 1;
+			found_arg++;
 			name = "POSIX.1e ACLs";
 			avalue = optarg;
 			if (strcmp(avalue, "enable") &&
@@ -132,7 +132,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'e':
-			found_arg = 1;
+			found_arg++;
 			name = "maximum blocks per file in a cylinder group";
 			evalue = atoi(optarg);
 			if (evalue < 1)
@@ -142,7 +142,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'f':
-			found_arg = 1;
+			found_arg++;
 			name = "average file size";
 			fvalue = atoi(optarg);
 			if (fvalue < 1)
@@ -152,7 +152,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'j':
-			found_arg = 1;
+			found_arg++;
 			name = "softdep journaled file system";
 			jvalue = optarg;
 			if (strcmp(jvalue, "enable") &&
@@ -164,7 +164,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'J':
-			found_arg = 1;
+			found_arg++;
 			name = "gjournaled file system";
 			Jvalue = optarg;
 			if (strcmp(Jvalue, "enable") &&
@@ -176,7 +176,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'k':
-			found_arg = 1;
+			found_arg++;
 			name = "space to hold for metadata blocks";
 			kvalue = atoi(optarg);
 			if (kvalue < 0)
@@ -185,7 +185,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'L':
-			found_arg = 1;
+			found_arg++;
 			name = "volume label";
 			Lvalue = optarg;
 			i = -1;
@@ -205,7 +205,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'l':
-			found_arg = 1;
+			found_arg++;
 			name = "multilabel MAC file system";
 			lvalue = optarg;
 			if (strcmp(lvalue, "enable") &&
@@ -217,7 +217,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'm':
-			found_arg = 1;
+			found_arg++;
 			name = "minimum percentage of free space";
 			mvalue = atoi(optarg);
 			if (mvalue < 0 || mvalue > 99)
@@ -226,7 +226,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'N':
-			found_arg = 1;
+			found_arg++;
 			name = "NFSv4 ACLs";
 			Nvalue = optarg;
 			if (strcmp(Nvalue, "enable") &&
@@ -238,7 +238,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'n':
-			found_arg = 1;
+			found_arg++;
 			name = "soft updates";
 			nvalue = optarg;
 			if (strcmp(nvalue, "enable") != 0 &&
@@ -250,7 +250,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'o':
-			found_arg = 1;
+			found_arg++;
 			name = "optimization preference";
 			if (strcmp(optarg, "space") == 0)
 				ovalue = FS_OPTSPACE;
@@ -264,12 +264,12 @@ main(int argc, char *argv[])
 			break;
 
 		case 'p':
-			found_arg = 1;
+			found_arg++;
 			pflag = 1;
 			break;
 
 		case 's':
-			found_arg = 1;
+			found_arg++;
 			name = "expected number of files per directory";
 			svalue = atoi(optarg);
 			if (svalue < 1)
@@ -279,7 +279,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 'S':
-			found_arg = 1;
+			found_arg++;
 			name = "Softdep Journal Size";
 			Svalue = atoi(optarg);
 			if (Svalue < SUJ_MIN)
@@ -288,7 +288,7 @@ main(int argc, char *argv[])
 			break;
 
 		case 't':
-			found_arg = 1;
+			found_arg++;
 			name = "trim";
 			tvalue = optarg;
 			if (strcmp(tvalue, "enable") != 0 &&
@@ -310,6 +310,13 @@ main(int argc, char *argv[])
 	on = special = argv[0];
 	if (ufs_disk_fillout(&disk, special) == -1)
 		goto err;
+	/*
+	 * Check for unclean filesystem.
+	 */
+	if ((sblock.fs_clean == 0 ||
+	    (sblock.fs_flags & (FS_UNCLEAN | FS_NEEDSFSCK)) != 0) &&
+	    (found_arg > 1 || !pflag))
+		errx(1, "%s is not clean - run fsck.\n", special);
 	if (disk.d_name != special) {
 		if (statfs(special, &stfs) != 0)
 			warn("Can't stat %s", special);


More information about the svn-src-all mailing list