Move the check for the filesystem having been run on a kernel that

predates metadata check hashes so that it is done before deciding
whether to compute a check-hash of the superblock.

Reported by:  Rick Macklem <rmacklem@uoguelph.ca>
Sponsored by: Netflix
This commit is contained in:
Kirk McKusick 2018-11-26 00:58:07 +00:00
parent a0e9218c01
commit a02bd3e38c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=340927
2 changed files with 6 additions and 3 deletions

View File

@ -276,6 +276,12 @@ readsuper(void *devfd, struct fs **fsp, off_t sblockloc, int isaltsblk,
fs->fs_bsize <= MAXBSIZE &&
fs->fs_bsize >= roundup(sizeof(struct fs), DEV_BSIZE) &&
fs->fs_sbsize <= SBLOCKSIZE) {
/*
* If the filesystem has been run on a kernel without
* metadata check hashes, disable them.
*/
if ((fs->fs_flags & FS_METACKHASH) == 0)
fs->fs_metackhash = 0;
if (fs->fs_ckhash != (ckhash = ffs_calc_sbhash(fs))) {
#ifdef _KERNEL
res = uprintf("Superblock check-hash failed: recorded "

View File

@ -813,9 +813,6 @@ ffs_mountfs(devvp, mp, td)
if ((error = ffs_sbget(devvp, &fs, -1, M_UFSMNT, ffs_use_bread)) != 0)
goto out;
fs->fs_fmod = 0;
/* if we ran on a kernel without metadata check hashes, disable them */
if ((fs->fs_flags & FS_METACKHASH) == 0)
fs->fs_metackhash = 0;
/* none of these types of check-hashes are maintained by this kernel */
fs->fs_metackhash &= ~(CK_INODE | CK_INDIR | CK_DIR);
/* no support for any undefined flags */