freebsd-skq/sbin/fsck_ffs
mckusick 5ce3cee7e7 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
2020-10-25 00:43:48 +00:00
..
dir.c This revision began as a simple change to eliminate an uninitialized warning 2019-05-21 22:24:38 +00:00
ea.c various: general adoption of SPDX licensing ID tags. 2017-11-27 15:37:16 +00:00
fsck_ffs.8 Correct the location of the first backup superblock in fsck_ffs.8. 2019-08-07 16:56:00 +00:00
fsck.h fsck_ffs/fsdb: fix -fno-common build 2020-03-29 20:03:46 +00:00
fsutil.c Update the libufs cgget() and cgput() interfaces to have a similar 2020-09-19 22:48:30 +00:00
gjournal.c Update the libufs cgget() and cgput() interfaces to have a similar 2020-09-19 22:48:30 +00:00
globs.c fsck_ffs/fsdb: fix -fno-common build 2020-03-29 20:03:46 +00:00
inode.c Followup to -r344552 in which fsck_ffs checks for a size past the 2019-04-13 13:31:06 +00:00
main.c Move all of the error prints in readsb() from stderr to stdout. 2020-09-01 18:50:26 +00:00
Makefile sbin: normalize paths using SRCTOP-relative paths or :H when possible 2017-03-04 11:33:01 +00:00
Makefile.depend DIRDEPS_BUILD: Update dependencies. 2017-10-31 00:07:04 +00:00
pass1.c Treat any inode with bad content as unknown (i.e., ask if it should 2019-07-20 21:39:32 +00:00
pass1b.c General further adoption of SPDX licensing ID tags. 2017-11-20 19:49:47 +00:00
pass2.c In preparation for adding inode check-hashes, change the fsck_ffs 2018-10-31 05:17:53 +00:00
pass3.c General further adoption of SPDX licensing ID tags. 2017-11-20 19:49:47 +00:00
pass4.c General further adoption of SPDX licensing ID tags. 2017-11-20 19:49:47 +00:00
pass5.c Ensure that cylinder-group check-hashes are properly updated when first 2018-12-05 06:31:50 +00:00
setup.c Various new check-hash checks have been added to the UFS filesystem 2020-10-25 00:43:48 +00:00
suj.c Update the libufs cgget() and cgput() interfaces to have a similar 2020-09-19 22:48:30 +00:00
utilities.c Remove unused includes. 2019-12-22 05:44:29 +00:00