Module Name:    src
Committed By:   dholland
Date:           Wed Aug 24 07:44:05 UTC 2016

Modified Files:
        src/sbin/resize_ffs: resize_ffs.c

Log Message:
Fix handling of ffsv2 inode initialization. Retires PR 51116.


To generate a diff of this commit:
cvs rdiff -u -r1.46 -r1.47 src/sbin/resize_ffs/resize_ffs.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/resize_ffs/resize_ffs.c
diff -u src/sbin/resize_ffs/resize_ffs.c:1.46 src/sbin/resize_ffs/resize_ffs.c:1.47
--- src/sbin/resize_ffs/resize_ffs.c:1.46	Thu Mar 17 01:41:54 2016
+++ src/sbin/resize_ffs/resize_ffs.c	Wed Aug 24 07:44:05 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: resize_ffs.c,v 1.46 2016/03/17 01:41:54 christos Exp $	*/
+/*	$NetBSD: resize_ffs.c,v 1.47 2016/08/24 07:44:05 dholland Exp $	*/
 /* From sources sent on February 17, 2003 */
 /*-
  * As its sole author, I explicitly place this code in the public
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: resize_ffs.c,v 1.46 2016/03/17 01:41:54 christos Exp $");
+__RCSID("$NetBSD: resize_ffs.c,v 1.47 2016/08/24 07:44:05 dholland Exp $");
 
 #include <sys/disk.h>
 #include <sys/disklabel.h>
@@ -105,7 +105,8 @@ union dinode {
 	} while (0)
 
 /* a cg's worth of brand new squeaky-clean inodes */
-static struct ufs1_dinode *zinodes;
+static struct ufs1_dinode *zinodes1;
+static struct ufs2_dinode *zinodes2;
 
 /* pointers to the in-core cgs, read off disk and possibly modified */
 static struct cg **cgs;
@@ -615,10 +616,15 @@ initcg(int cgn)
 	newsb->fs_cstotal.cs_nffree += cg->cg_cs.cs_nffree;
 	newsb->fs_cstotal.cs_nbfree += cg->cg_cs.cs_nbfree;
 	newsb->fs_cstotal.cs_nifree += cg->cg_cs.cs_nifree;
-	if (is_ufs2 == 0)
+	if (is_ufs2) {
+		/* Write out the cleared inodes. */
+		writeat(FFS_FSBTODB(newsb, cgimin(newsb, cgn)), zinodes2,
+		    cg->cg_initediblk * sizeof(*zinodes2));
+	} else {
 		/* Write out the cleared inodes. */
-		writeat(FFS_FSBTODB(newsb, cgimin(newsb, cgn)), zinodes,
-		    newsb->fs_ipg * sizeof(*zinodes));
+		writeat(FFS_FSBTODB(newsb, cgimin(newsb, cgn)), zinodes1,
+		    newsb->fs_ipg * sizeof(*zinodes1));
+	}
 	/* Dirty the cg. */
 	cgflags[cgn] |= CGF_DIRTY;
 }
@@ -993,8 +999,15 @@ grow(void)
 	/* Update the timestamp. */
 	newsb->fs_time = timestamp();
 	/* Allocate and clear the new-inode area, in case we add any cgs. */
-	zinodes = alloconce(newsb->fs_ipg * sizeof(*zinodes), "zeroed inodes");
-	memset(zinodes, 0, newsb->fs_ipg * sizeof(*zinodes));
+	if (is_ufs2) {
+		zinodes2 = alloconce(newsb->fs_ipg * sizeof(*zinodes2),
+			"zeroed inodes");
+		memset(zinodes2, 0, newsb->fs_ipg * sizeof(*zinodes2));
+	} else {
+		zinodes1 = alloconce(newsb->fs_ipg * sizeof(*zinodes1),
+			"zeroed inodes");
+		memset(zinodes1, 0, newsb->fs_ipg * sizeof(*zinodes1));
+	}
 	
 	/* Check that the new last sector (frag, actually) is writable.  Since
 	 * it's at least one frag larger than it used to be, we know we aren't

Reply via email to