path: root/sbin/fsck_ffs
diff options
authorKirk McKusick <mckusick@FreeBSD.org>2020-10-25 00:43:48 +0000
committerKirk McKusick <mckusick@FreeBSD.org>2020-10-25 00:43:48 +0000
commit996d40f91d7c3ca1b4efa11a4f59ee47c924eab1 (patch)
tree92977bf23ba8065e7d5bd6adea18237fbb075583 /sbin/fsck_ffs
parent6cb13a305842c19d3fbfc44493c05bc082286c3c (diff)
Various new check-hash checks have been added to the UFS filesystem
over various major releases. Superblock check hashes were added for the 12 release and cylinder-group and inode check hashes will appear in the 13 release. When a disk with a UFS filesystem is writably mounted, the kernel clears the feature flags for anything that it does not support. For example, if a UFS disk from a 12-stable kernel is mounted on an 11-stable system, the 11-stable kernel will clear the flag in the filesystem superblock that indicates that superblock check-hashs are being maintained. Thus if the disk is later moved back to a 12-stable system, the 12-stable system will know to ignore its incorrect check-hash. If the only filesystem modification done on the earlier kernel is to run a utility such as growfs(8) that modifies the superblock but neither updates the check-hash nor clears the feature flag indicating that it does not support the check-hash, the disk will fail to mount if it is moved back to its original newer kernel. This patch moves the code that clears the filesystem feature flags from the mount code (ffs_mountfs()) to the code that reads the superblock (ffs_sbget()). As ffs_sbget() is used by the kernel mount code and is imported into libufs(3), all the filesystem utilities will now also clear these flags when they make modifications to the filesystem. As suggested by John Baldwin, fsck_ffs(8) has been changed to accept and repair bad superblock check-hashes rather than refusing to run. This change allows fsck to recover filesystems that have been impacted by utilities older than those created after this change and is a sensible thing to do in any event. Reported by: John Baldwin (jhb@) MFC after: 2 weeks Sponsored by: Netflix
Notes: svn path=/head/; revision=367034
Diffstat (limited to 'sbin/fsck_ffs')
1 files changed, 1 insertions, 1 deletions
diff --git a/sbin/fsck_ffs/setup.c b/sbin/fsck_ffs/setup.c
index 7e169f6d4ceb..deb920e00e7c 100644
--- a/sbin/fsck_ffs/setup.c
+++ b/sbin/fsck_ffs/setup.c
@@ -330,7 +330,7 @@ readsb(int listerr)
int bad, ret;
struct fs *fs;
- super = bflag ? bflag * dev_bsize : STDSB;
+ super = bflag ? bflag * dev_bsize : STDSB_NOHASHFAIL;
if ((ret = sbget(fsreadfd, &fs, super)) != 0) {
switch (ret) {