svn commit: r324499 - head/sbin/growfs
Kirk McKusick
mckusick at FreeBSD.org
Tue Oct 10 16:17:04 UTC 2017
Author: mckusick
Date: Tue Oct 10 16:17:03 2017
New Revision: 324499
URL: https://svnweb.freebsd.org/changeset/base/324499
Log:
Growfs got missed in r323923 that added a check hash to cylinder groups.
This makes the needed changes to add/update cylinder group check hashes
when a filesystem is expanded.
Reported by: kib and Warner Losh (imp)
Reviewed by: kib
Tested by: Peter Holm (pho)
Modified:
head/sbin/growfs/Makefile
head/sbin/growfs/growfs.c
Modified: head/sbin/growfs/Makefile
==============================================================================
--- head/sbin/growfs/Makefile Tue Oct 10 15:46:58 2017 (r324498)
+++ head/sbin/growfs/Makefile Tue Oct 10 16:17:03 2017 (r324499)
@@ -20,7 +20,7 @@ CFLAGS+= -DFS_DEBUG
NO_WCAST_ALIGN= yes
.endif
-LIBADD= util
+LIBADD= ufs util
HAS_TESTS=
SUBDIR.${MK_TESTS}+= tests
Modified: head/sbin/growfs/growfs.c
==============================================================================
--- head/sbin/growfs/growfs.c Tue Oct 10 15:46:58 2017 (r324498)
+++ head/sbin/growfs/growfs.c Tue Oct 10 16:17:03 2017 (r324499)
@@ -78,6 +78,7 @@ __FBSDID("$FreeBSD$");
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#include <libutil.h>
+#include <libufs.h>
#include "debug.h"
@@ -121,6 +122,7 @@ static void updcsloc(time_t, int, int, unsigned int);
static void frag_adjust(ufs2_daddr_t, int);
static void updclst(int);
static void mount_reload(const struct statfs *stfs);
+static void cgckhash(struct cg *);
/*
* Here we actually start growing the file system. We basically read the
@@ -480,6 +482,7 @@ initcg(int cylno, time_t modtime, int fso, unsigned in
sblock.fs_cstotal.cs_nifree += acg.cg_cs.cs_nifree;
*cs = acg.cg_cs;
+ cgckhash(&acg);
memcpy(iobuf, &acg, sblock.fs_cgsize);
memset(iobuf + sblock.fs_cgsize, '\0',
sblock.fs_bsize * 3 - sblock.fs_cgsize);
@@ -771,6 +774,7 @@ updjcg(int cylno, time_t modtime, int fsi, int fso, un
/*
* Write the updated "joining" cylinder group back to disk.
*/
+ cgckhash(&acg);
wtfs(fsbtodb(&sblock, cgtod(&sblock, cylno)), (size_t)sblock.fs_cgsize,
(void *)&acg, fso, Nflag);
DBG_PRINT0("jcg written\n");
@@ -1738,4 +1742,18 @@ mount_reload(const struct statfs *stfs)
err(9, "%s: cannot reload filesystem%s%s", stfs->f_mntonname,
*errmsg != '\0' ? ": " : "", errmsg);
}
+}
+
+/*
+ * Calculate the check-hash of the cylinder group.
+ */
+static void
+cgckhash(cgp)
+ struct cg *cgp;
+{
+
+ if ((sblock.fs_metackhash & CK_CYLGRP) == 0)
+ return;
+ cgp->cg_ckhash = 0;
+ cgp->cg_ckhash = calculate_crc32c(~0L, (void *)cgp, sblock.fs_cgsize);
}
More information about the svn-src-all
mailing list