#
b241767f |
|
19-Feb-2024 |
Kirk McKusick <mckusick@FreeBSD.org> |
Eliminate unnecessary UFS1 integrity checks. The UFS1 integrity checks added in FreeBSD 14 were too aggressive for UFS1 filesystems created in FreeBSD 4 and 9 systems. This patch removes those tests which can be done safely since they are not relevant to the current implementation of UFS1. This is a follow-on report to bug report 264450 (comments 21-28). Reported by: slb@sonnet.com Tested by: slb@sonnet.com PR: 264450 MFC after: 1 week
|
#
32e86a82 |
|
24-Nov-2023 |
Warner Losh <imp@FreeBSD.org> |
sbin: Automated cleanup of cdefs and other formatting Apply the following automated changes to try to eliminate no-longer-needed sys/cdefs.h includes as well as now-empty blank lines in a row. Remove /^#if.*\n#endif.*\n#include\s+<sys/cdefs.h>.*\n/ Remove /\n+#include\s+<sys/cdefs.h>.*\n+#if.*\n#endif.*\n+/ Remove /\n+#if.*\n#endif.*\n+/ Remove /^#if.*\n#endif.*\n/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/types.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/param.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/capsicum.h>/ Sponsored by: Netflix
|
#
51e16cb8 |
|
23-Nov-2023 |
Warner Losh <imp@FreeBSD.org> |
sbin: Remove ancient SCCS tags. Remove ancient SCCS tags from the tree, automated scripting, with two minor fixup to keep things compiling. All the common forms in the tree were removed with a perl script. Sponsored by: Netflix
|
#
772430dd |
|
17-Nov-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Ensure I/O buffers in libufs(3) are 128-byte aligned. Various disk controllers require their buffers to be aligned to a cache-line size (128 bytes). For buffers allocated in structures, ensure that they are 128-byte aligned. Use aligned_malloc to allocate memory to ensure that the returned memory is 128-byte aligned. While we are here, we replace the dynamically allocated inode buffer with a buffer allocated in the uufsd structure just as the superblock and cylinder group buffers do. This can be removed if/when the kernel is fixed. Because this problem has existed on one I/O subsystem or another since the 1990's, we are probably stuck with dealing with it forever. The problem most recent showed up in Azure, see: https://reviews.freebsd.org/D41728 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=267654 Before these fixes were applied, it was confirmed that the changes in this commit also fixed the issue in Azure. Reviewed-by: Warner Losh, kib Tested-by: Souradeep Chakrabarti of Microsoft (earlier version) PR: 267654 Differential Revision: https://reviews.freebsd.org/D41724
|
#
d3a36e4b |
|
25-Oct-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Delete snapshot after opening it when running fsck_ffs(9) in background. When fsck_ffs(8) runs in background, it creates a snapshot named fsck_snapshot in the filesystem's .snap directory. The fsck_snapshot file was removed when the background fsck finished. If the system crashed or the fsck exited unexpectedly, the fsck_snapshot file would remain. The snapshot would consume ever more space as the filesystem changed over time until it was removed by a system administrator or a future run of background fsck removed it to create a new snapshot file. This commit unlinks the .snap/fsck_snapshot file immediately after opening it so that it will be reclaimed when fsck closes it at the conclusion of its run. After a system crash, it will be removed as part of the filesystem cleanup because of its zero reference count. As only a few milliseconds pass between its creation and unlinking, there is far less opportunity for it to be accidentally left behind. PR: 106107 MFC-after: 1 week
|
#
1d386b48 |
|
16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
Remove $FreeBSD$: one-line .c pattern Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
#
101a9ac0 |
|
27-May-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Fix a bug in fsck_ffs(8) triggered by corrupted filesystems. Check for valid file size before processing journal entries for it. Done by extracting the file size check from pass1.c into chkfilesize() then using it in the journal code in suj.c Reported-by: Robert Morris PR: 271378 MFC-after: 1 week Sponsored-by: The FreeBSD Foundation
|
#
11ce203e |
|
27-May-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Fix a bug in fsck_ffs(8) triggered by corrupted filesystems. The last valid inode in the filesystem is maxino - 1, not maxino. Thus validity checks should ino < maxino, not ino <= maxino. Reported-by: Robert Morris PR: 271312 MFC-after: 1 week Sponsored-by: The FreeBSD Foundation
|
#
0a6e34e9 |
|
15-May-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Fix size differences between architectures of the UFS/FFS CGSIZE macro value. The cylinder group header structure ended with `u_int8_t cg_space[1]' representing the beginning of the inode bitmap array. Some architectures like the i386 rounded this up to a 4-byte boundry while other architectures like the amd64 rounded it up to an 8-byte boundry. Thus sizeof(struct cg) was four bytes bigger on an amd64 machine than on an i386 machine. If a filesystem created on an i386 machine was moved to an amd64 machine, the size of the cylinder group calculated by the CGSIZE macro would appear to grow by four bytes. Filesystems whose cylinder groups were exactly equal to the block size on an i386 machine would appear to have a cylinder group that was four bytes too big when moved to an amd64 machine. Note that although the structure appears to be too big, it in fact is fine. It is just the calaculation of its size that is in error. The fix is to remove the cg_space element from the cylinder-group structure so that the calculated size of the structure is the same size on all architectures. Reported by: Tijl Coosemans Tested by: Tijl Coosemans and Peter Holm MFC after: 1 week Sponsored by: The FreeBSD Foundation
|
#
40647558 |
|
03-May-2023 |
Chuck Silvers <chs@FreeBSD.org> |
fsck_ffs: fix the previous change that skipped pass 5 in some cases The previous change involved calling check_cgmagic() twice in a row for the same CG in order to differentiate when the CG was already ok vs. when the CG was rebuilt, but that doesn't work because the second call (which was supposed to rebuild the CG) returns 0 (indicating that the CG was not rebuilt) due to the prevfailcg check causing an early failure return. Fix this by moving the rebuild part of check_cgmagic() out into a separate function which is called by pass1() when it wants to rebuild a CG. Fixes: da86e7a20dc4a4b17e8d9e7630ed9b675cf71702 Reported by: pho Discussed with: mckusick Sponsored by: Netflix
|
#
da86e7a2 |
|
18-Apr-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Skip Pass 5 in fsck_ffs(8) when corrupt cylinder groups remain unfixed. Pass 1 of fsck_ffs checks the integrity of all the cylinder groups. If any are found to have been corrupted it offers to rebuild them. Pass 5 then makes a second pass over the cylinder groups to validate their block and inode maps. Pass 5 assumes that the cylinder groups are not corrupted and can segment fault if they are corrupted. Rather than rerunning the corruption checks a second time in pass 5, this fix keeps track whether any corrupt cylinder groups were found but not fixed in pass 1 either due to running with the -n flag or by explicitly answering `no' when asked whether to fix a corrupted cylinder group. If any corrupted cylinder groups remain after pass 1, fsck_ffs will decline to run pass 5. Instead it marks the filesystem as unclean so that fsck_ffs will need to be run again before the filesystem can be mounted. This patch cleans up and documents the return value from check_cgmagic(). It also renames the variable / parameter "rebuildcg" to "rebuiltcg". This parameter describes whether the cylinder group has been rebuilt rather than whether it should be rebuilt. Reported by: Chuck Silvers Reviewed by: Chuck Silvers MFC after: 1 week
|
#
18746531 |
|
18-Apr-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Bug fixes for fsck_ffs(8). Increment a reference count when returning a zero'ed out buffer after a failed read. Zero out a structure before using it. Only dirty a buffer that has been modified. Submitted by: Chuck Silvers Sponsored by: Netflix MFC after: 1 week
|
#
e5d0d1c5 |
|
22-Mar-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Rewrite function definitions with identifier lists. A few functions snuck in with K&R style definitions. Also add some missing memory frees. MFC after: 1 week
|
#
52f97104 |
|
07-Mar-2023 |
Kirk McKusick <mckusick@FreeBSD.org> |
Correct several bugs in fsck_ffs(8) triggered by corrupted filesystems. If a directory entry has an illegal inode number (less than zero or greater than the last inode in the filesystem) the entry is removed. If a directory '.' or '..' entry had an illegal inode number they were being removed. Since fsck_ffs knows what the correct value is for these two entries fix them rather deleting them. Add much more extensive cylinder group checks and use them to be more careful about rebuilding a cylinder group. Check for out-of-range block numbers before trying to free them. When a directory is deleted also remove its cache entry created in pass1 so that later passes do not try to operate on a deleted directory. Check for ctime(3) returning NULL before trying to use its return. When freeing a directory inode, do not try to interpret it as a directory. Reserve space in the inostatlist to have room to allocate a lost+found directory. If an invalid block number is found past the end of an inode simply remove it rather than clearing and removing the inode. Modernize the inoinfo structure to use queue(3) LIST rather than a handrolled linked list implementation. Reported by: Bob Prohaska, John-Mark Gurney, and Mark Millard Tested by: Peter Holm Reviewed by: Peter Holm MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D38668
|
#
689a9368 |
|
09-Nov-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Fix types for fsck_ffs(8) i386 build. Reported by: jenkins Reported by: Cy Schubert Sponsored by: The FreeBSD Foundation
|
#
460ed610 |
|
09-Nov-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Add support for managing UFS/FFS snapshots to fsck_ffs(8). The kernel handles the managment of UFS/FFS snapshots. Since UFS/FFS updates filesystem data (rather than always writing changes to new locations like ZFS), the kernel must check every filesystem write to see if the block being written is part of a snapshot. If it is part of a snapshot, then the kernel must make a copy of the old block value into a newly allocated block for the snapshot before allowing the write to be done. Similarly, if a block is being freed, the kernel must check to see if it is part of a snapshot and let the snapshot claim the block rather than freeing it for future use. When a snapshot is freed, its blocks need to be offered to older snapshots and freed only if no older snapshots wish to claim them. When snapshots were added to UFS/FFS they were integrated into soft updates and just a small part of the management of snapshots needed to be added to fsck_ffs(8) as soft updates minimized the set of snapshot changes that might need correction. When journaling was added to soft updates a much more complete knowledge of snapshots needed to be added to fsck_ffs(8) for it to be able to properly handle the filesystem changes that a journal rollback needs to do (specifically the freeing and allocation of blocks). Since this functionality was unavailable, the use of snapshots was disabled when running with journaled soft updates. This set of changes imports the kernel code for the management of snapshots to fsck_ffs(8). With this code in place it will become possible to enable snapshots when running with journalled soft updates. The most immediate benefit will be the ability to use snapshots to take consistent filesystem dumps on live filesystems. Future work will be done to update fsck_ffs(8) to be able to use snapshots to run in background on live filesystems running with journaled soft updates. Reviewed by: kib Tested by: Peter Holm Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D36491
|
#
4b4cc78a |
|
05-Sep-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Formatting cleanups and debugging fix. Sponsored by: The FreeBSD Foundation
|
#
2e4da012 |
|
29-Aug-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Correct calculation of inode location in getnextino cache. Fix for 345bfec. Reported by: Peter Holm Sponsored by: The FreeBSD Foundation
|
#
27c6009e |
|
26-Aug-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Correct diagnostic messages for bad cylinder groups. Fix for 495b1ba. Reported by: Mike Karels Sponsored by: The FreeBSD Foundation
|
#
495b1baa |
|
26-Aug-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Provide better diagnostic messages for bad cylinder groups. Like the detailed diagnostics produced when a bad superblock is read, provide similar detailed diagnostics when bad cylinder groups are read. Reported by: Peter Holm Tested by: Peter Holm Sponsored by: The FreeBSD Foundation
|
#
be639cc8 |
|
24-Aug-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Update standard superblock when successful using an alternate superblock. Historically fsck_ffs(8) would only use alternate superblocks when running in manual mode. When the standard superblock fails, it now tries to find and use a backup superblocks even when running in `preen' mode. If an alternate superblock is found and the filesystem is successfully cleaned up using it, write the alternate superblock back to the standard superblock so that the filesystem can be subsequently mounted and used. Reported by: Peter Holm Tested by: Peter Holm Sponsored by: The FreeBSD Foundation
|
#
7c332e97 |
|
20-Jul-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Ask to look for alternate UFS2 superblocks when the standard one is unusable. This feature was inadvertently lost in commit c0bfa109b942.
|
#
c0bfa109 |
|
04-Feb-2022 |
Kirk McKusick <mckusick@FreeBSD.org> |
Have fsck_ffs(8) properly correct superblock check-hash failures. Part of the problem was that fsck_ffs would read the superblock multiple times complaining and repairing the superblock check hash each time and then at the end failing to write out the superblock with the corrected check hash. This fix reads the superblock just once and if the check hash is corrected ensures that the fixed superblock gets written. Tested by: Peter Holm PR: 245916 MFC after: 1 week Sponsored by: Netflix
|
#
20123b25 |
|
20-May-2021 |
Robert Wing <rew@FreeBSD.org> |
fsck_ffs(8): fix divide by zero when debug messages are enabled Only print buffer cache debug message when a cache lookup has been done. When running `fsck_ffs -d` on a gjournal'ed filesystem, it's possible that totalreads is greater than zero when no cache lookup has been done - causing a divide by zero. This commit fixes the following error: Floating point exception (core dumped) Reviewed by: mckusick Differential Revision: https://reviews.freebsd.org/D30370
|
#
689724cb |
|
26-Apr-2021 |
Kirk McKusick <mckusick@FreeBSD.org> |
Clean up fsck_ffs error message output. When fsck_ffs is creating a lost+found directory it must allocate an inode and a filesystem block. If it encounters a cylinder group with a bad check hash, it complains twice: once for the inode and again for the filesystem block. This change suppresses the second complaint. Reported by: Chuck Silvers Tested by: Chuck Silvers MFC after: 1 week Sponsored by: Netflix
|
#
84a0e3f9 |
|
26-Apr-2021 |
Kirk McKusick <mckusick@FreeBSD.org> |
Make fsck_ffs more persistent in creating a lost+found directory. When fsck_ffs is running in interactive mode and finds unlinked files, it offers to either unlink them or place them in a lost+found directory. If the lost+found directory option is requested and no lost+found directory exists, fsck_ffs offers to create one. When creating one, it must allocate an inode and a filesystem block. It attempts to allocate them from the first cylinder group. If the first cylinder group has a bad check hash, it gives up. This change expands the search into later cylinder groups when the first one fails with a bad check hash. Reported by: Chuck Silvers Tested by: Chuck Silvers MFC after: 1 week Sponsored by: Netflix
|
#
fc56fd26 |
|
02-Apr-2021 |
Kirk McKusick <mckusick@FreeBSD.org> |
Ensure that all allocated data structures in fsck_ffs are freed. Several large data structures are allocated by fsck_ffs to track resource usage. Most but not all were deallocated at the end of checking each filesystem. This commit consolidates the freeing of all data structures in one place and adds one that had previously been missing. It is important to clean up these data structures as they can be large. If the previous allocations have not been freed, fsck_ffs can run out of address space when many large filesystems are being checked. An alternative would be to fork a new instance of fsck_ffs for each filesystem to be checked, but we choose to free the small set of large structures to save the fork overhead. Reported by: Chuck Silvers Tested by: Chuck Silvers MFC after: 7 days Sponsored by: Netflix
|
#
6385cabd |
|
11-Mar-2021 |
Kirk McKusick <mckusick@FreeBSD.org> |
Do not complain about incorrect cylinder group check-hashes when asked to add them to a filesystem. MFC after: 3 days Sponsored by: Netflix
|
#
c6951fac |
|
08-Jan-2021 |
Cy Schubert <cy@FreeBSD.org> |
Fix 32-bit build post 5cc52631b3b88dfc36d8049dc8bece8573c5f9af.
|
#
5cc52631 |
|
06-Jan-2021 |
Kirk McKusick <mckusick@FreeBSD.org> |
Rewrite the disk I/O management system in fsck_ffs(8). Other than making fsck_ffs(8) run faster, there should be no functional change. The original fsck_ffs(8) had its own disk I/O management system. When gjournal(8) was added to FreeBSD 7, code was added to fsck_ffs(8) to do the necessary gjournal rollback. Rather than use the existing fsck_ffs(8) disk I/O system, it wrote its own from scratch. Similarly when journalled soft updates were added in FreeBSD 9, code was added to fsck_ffs(8) to do the necessary journal rollback. And once again, rather than using either of the existing fsck_ffs(8) disk I/O systems, it wrote its own from scratch. Lastly the fsdb(8) utility uses the fsck_ffs(8) disk I/O management system. In preparation for making the changes necessary to enable snapshots to be taken when using journalled soft updates, it was necessary to have a single disk I/O system used by all the various subsystems in fsck_ffs(8). This commit merges the functionality required by all the different subsystems into a single disk I/O system that supports all of their needs. In so doing it picks up optimizations from each of them with the results that each of the subsystems does fewer reads and writes than it did with its own customized I/O system. It also greatly simplifies making changes to fsck_ffs(8) since everything goes through a single place. For example the ginode() function fetches an inode from the disk. When inode check hashes were added, they previously had to be checked in the code implementing inode fetch in each of the three different disk I/O systems. Now they need only be checked in ginode(). Tested by: Peter Holm Sponsored by: Netflix
|
#
7180f1ab |
|
18-Dec-2020 |
Kirk McKusick <mckusick@FreeBSD.org> |
Rename pass4check() to freeblock() and move from pass4.c to inode.c. The new name more accurately describes what it does and the file move puts it with other similar functions. Done in preparation for future cleanups. No functional differences intended. Sponsored by: Netflix Historic Footnote: my last FreeBSD svn commit
|
#
85ee267a |
|
19-Sep-2020 |
Kirk McKusick <mckusick@FreeBSD.org> |
Update the libufs cgget() and cgput() interfaces to have a similar API to the sbget() and sbput() interfaces. Specifically they take a file descriptor pointer rather than the struct uufsd *disk pointer used by the libufs cgread() and cgwrite() interfaces. Update fsck_ffs to use these revised interfaces. No functional changes intended. Sponsored by: Netflix
|
#
04e5c6f1 |
|
15-Dec-2018 |
Edward Tomasz Napierala <trasz@FreeBSD.org> |
Make fsck(8) use pread(2). This cuts the number of syscalls by half. Reviewed by: kib, mckusick MFC after: 2 weeks Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D17586
|
#
8ebae128 |
|
04-Dec-2018 |
Kirk McKusick <mckusick@FreeBSD.org> |
Ensure that cylinder-group check-hashes are properly updated when first creating them and when correcting them when they are found to be corrupted. Reported by: Don Lewis (truckman@) Sponsored by: Netflix
|
#
6040822c |
|
30-Jul-2018 |
Alan Somers <asomers@FreeBSD.org> |
Make timespecadd(3) and friends public The timespecadd(3) family of macros were imported from NetBSD back in r35029. However, they were initially guarded by #ifdef _KERNEL. In the meantime, we have grown at least 28 syscalls that use timespecs in some way, leading many programs both inside and outside of the base system to redefine those macros. It's better just to make the definitions public. Our kernel currently defines two-argument versions of timespecadd and timespecsub. NetBSD, OpenBSD, and FreeDesktop.org's libbsd, however, define three-argument versions. Solaris also defines a three-argument version, but only in its kernel. This revision changes our definition to match the common three-argument version. Bump _FreeBSD_version due to the breaking KPI change. Discussed with: cem, jilles, ian, bde Differential Revision: https://reviews.freebsd.org/D14725
|
#
d8ba45e2 |
|
16-Mar-2018 |
Ed Maste <emaste@FreeBSD.org> |
Revert r313780 (UFS_ prefix)
|
#
1e2b9afc |
|
16-Mar-2018 |
Ed Maste <emaste@FreeBSD.org> |
Prefix UFS symbols with UFS_ to reduce namespace pollution Followup to r313780. Also prefix ext2's and nandfs's versions with EXT2_ and NANDFS_. Reported by: kib Reviewed by: kib, mckusick Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D9623
|
#
dffce215 |
|
25-Jan-2018 |
Kirk McKusick <mckusick@FreeBSD.org> |
Refactoring of reading and writing of the UFS/FFS superblock. Specifically reading is done if ffs_sbget() and writing is done in ffs_sbput(). These functions are exported to libufs via the sbget() and sbput() functions which then used in the various filesystem utilities. This work is in preparation for adding subperblock check hashes. No functional change intended. Reviewed by: kib
|
#
af89fcf7 |
|
25-Jan-2018 |
Li-Wen Hsu <lwhsu@FreeBSD.org> |
Fix architectures where pointer and u_int have different sizes Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D14049
|
#
a6bbdf81 |
|
24-Jan-2018 |
Kirk McKusick <mckusick@FreeBSD.org> |
More throughly integrate libufs into fsck_ffs by using its cgput() routine to write out the cylinder groups rather than recreating the calculation of the cylinder-group check hash in fsck_ffs. No functional change intended.
|
#
957fc241 |
|
16-Jan-2018 |
Kirk McKusick <mckusick@FreeBSD.org> |
Rename cgget => cglookup to clear name space for new libufs function cgget. No functional change.
|
#
8a16b7a1 |
|
20-Nov-2017 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
General further adoption of SPDX licensing ID tags. Mainly focus on files that use BSD 3-Clause license. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Special thanks to Wind River for providing access to "The Duke of Highlander" tool: an older (2014) run over FreeBSD tree was useful as a starting point.
|
#
75e3597a |
|
21-Sep-2017 |
Kirk McKusick <mckusick@FreeBSD.org> |
Continuing efforts to provide hardening of FFS, this change adds a check hash to cylinder groups. If a check hash fails when a cylinder group is read, no further allocations are attempted in that cylinder group until it has been fixed by fsck. This avoids a class of filesystem panics related to corrupted cylinder group maps. The hash is done using crc32c. Check hases are added only to UFS2 and not to UFS1 as UFS1 is primarily used in embedded systems with small memories and low-powered processors which need as light-weight a filesystem as possible. Specifics of the changes: sys/sys/buf.h: Add BX_FSPRIV to reserve a set of eight b_xflags that may be used by individual filesystems for their own purpose. Their specific definitions are found in the header files for each filesystem that uses them. Also add fields to struct buf as noted below. sys/kern/vfs_bio.c: It is only necessary to compute a check hash for a cylinder group when it is actually read from disk. When calling bread, you do not know whether the buffer was found in the cache or read. So a new flag (GB_CKHASH) and a pointer to a function to perform the hash has been added to breadn_flags to say that the function should be called to calculate a hash if the data has been read. The check hash is placed in b_ckhash and the B_CKHASH flag is set to indicate that a read was done and a check hash calculated. Though a rather elaborate mechanism, it should also work for check hashing other metadata in the future. A kernel internal API change was to change breada into a static fucntion and add flags and a function pointer to a check-hash function. sys/ufs/ffs/fs.h: Add flags for types of check hashes; stored in a new word in the superblock. Define corresponding BX_ flags for the different types of check hashes. Add a check hash word in the cylinder group. sys/ufs/ffs/ffs_alloc.c: In ffs_getcg do the dance with breadn_flags to get a check hash and if one is provided, check it. sys/ufs/ffs/ffs_vfsops.c: Copy across the BX_FFSTYPES flags in background writes. Update the check hash when writing out buffers that need them. sys/ufs/ffs/ffs_snapshot.c: Recompute check hash when updating snapshot cylinder groups. sys/libkern/crc32.c: lib/libufs/Makefile: lib/libufs/libufs.h: lib/libufs/cgroup.c: Include libkern/crc32.c in libufs and use it to compute check hashes when updating cylinder groups. Four utilities are affected: sbin/newfs/mkfs.c: Add the check hashes when building the cylinder groups. sbin/fsck_ffs/fsck.h: sbin/fsck_ffs/fsutil.c: Verify and update check hashes when checking and writing cylinder groups. sbin/fsck_ffs/pass5.c: Offer to add check hashes to existing filesystems. Precompute check hashes when rebuilding cylinder group (although this will be done when it is written in fsutil.c it is necessary to do it early before comparing with the old cylinder group) sbin/dumpfs/dumpfs.c Print out the new check hash flag(s) sbin/fsdb/Makefile: Needs to add libufs now used by pass5.c imported from fsck_ffs. Reviewed by: kib Tested by: Peter Holm (pho)
|
#
fbbd9655 |
|
28-Feb-2017 |
Warner Losh <imp@FreeBSD.org> |
Renumber copyright clause 4 Renumber cluase 4 to 3, per what everybody else did when BSD granted them permission to remove clause 3. My insistance on keeping the same numbering for legal reasons is too pedantic, so give up on that point. Submitted by: Jan Schaumann <jschauma@stevens.edu> Pull Request: https://github.com/freebsd/freebsd/pull/96
|
#
1dc349ab |
|
15-Feb-2017 |
Ed Maste <emaste@FreeBSD.org> |
prefix UFS symbols with UFS_ to reduce namespace pollution Specifically: ROOTINO -> UFS_ROOTINO WINO -> UFS_WINO NXADDR -> UFS_NXADDR NDADDR -> UFS_NDADDR NIADDR -> UFS_NIADDR MAXSYMLINKLEN_UFS[12] -> UFS[12]_MAXSYMLINKLEN (for consistency) Also prefix ext2's and nandfs's NDADDR and NIADDR with EXT2_ and NANDFS_ Reviewed by: kib, mckusick Obtained from: NetBSD MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D9536
|
#
0ecf59f6 |
|
09-Feb-2017 |
Conrad Meyer <cem@FreeBSD.org> |
ufs: Use UFS_MAXNAMLEN constant (like NFS, EXT2FS, SVR4, IBCS2) instead of redefining the MAXNAMLEN constant. No functional change. Reviewed by: kib@, markj@ Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D9500
|
#
1120faab |
|
01-May-2016 |
Marcelo Araujo <araujo@FreeBSD.org> |
Use MIN/MAX macros from sys/param.h. MFC after: 2 weeks.
|
#
7d5e6562 |
|
12-Apr-2016 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
fsck_ffs for pointers replace 0 with NULL. Found with devel/coccinelle. Reviewed by: mckusick
|
#
e2f4949a |
|
11-Mar-2014 |
Kirk McKusick <mckusick@FreeBSD.org> |
Avoid segment fault when attempting to clean up cylinder group buffer cache. PR: 187221 Submitted by: Petr Lampa <lampa@fit.vutbr.cz> Obtained from: Petr Lampa <lampa@fit.vutbr.cz> MFC after: 1 week
|
#
eff68496 |
|
25-Feb-2014 |
Kirk McKusick <mckusick@FreeBSD.org> |
Arguments for malloc and calloc should be size_t, not int. Use proper bounds check when trying to free cached memory. Spotted by: Xin Li Tested by: Dmitry Sivachenko MFC after: 2 weeks
|
#
7703a6ff |
|
29-Dec-2013 |
Scott Long <scottl@FreeBSD.org> |
Add the -R option to allow fsck_ffs to restart itself when too many critical errors have been detected in a particular run. Clean up the global state variables so that a restart can happen correctly. Separate the global variables in fsck_ffs and fsdb to their own file. This fixes header sharing with fscd. Correctly initialize, static-ize, and remove global variables as needed in dir.c. This fixes a problem with lost+found directories that was causing a segfault. Correctly initialize, static-ize, and remove global variables as needed in suj.c. Initialize the suj globals before allocating the disk object, not after. Also ensure that 'preen' mode doesn't conflict with 'restart' mode Submitted by: scottl, max Reviewed by: max, mckusick (earlier version) Obtained from: Netflix MFC after: 3 days
|
#
8ce80d4b |
|
20-Aug-2013 |
Dag-Erling Smørgrav <des@FreeBSD.org> |
Fix the zeroing loop. I must have been drunk when I wrote this... MFC after: 3 days
|
#
ce779f37 |
|
30-Jul-2013 |
Scott Long <scottl@FreeBSD.org> |
Add a 'surrender' mode to fsck_ffs. With the -S flag, once hard read errors are encountered, the fsck will stop instead of wasting time chewing through possibly other errors. Obtained from: Netflix MFC after: 3 days
|
#
2b5373de |
|
29-Apr-2013 |
Dag-Erling Smørgrav <des@FreeBSD.org> |
Add a -Z option which zeroes unused blocks. It can be combined with -E, in which case unused blocks are first zeroed and then erased. Reviewed by: mckusick MFC after: 3 weeks
|
#
061ea59d |
|
24-Mar-2013 |
Kirk McKusick <mckusick@FreeBSD.org> |
Note that output is in seconds, not msec. KNF indentation. No functional change. No change to printf strings. No change to casting of printf arguments. Reported by: Bruce Evans
|
#
4b3bbe04 |
|
24-Mar-2013 |
Sean Bruno <sbruno@FreeBSD.org> |
Resolve clang compile errors on amd64/i386 for certain by casting. compile tested with clang on i386, amd64 compile tested with gcc on i386, amd64, sparc64 Submitted by: delphij
|
#
317e7747 |
|
23-Mar-2013 |
Sean Bruno <sbruno@FreeBSD.org> |
Minor formatting fix for printf() to fix clang builds. Submitted by: db Reviewed by: gjb
|
#
81fbded2 |
|
23-Mar-2013 |
Kirk McKusick <mckusick@FreeBSD.org> |
Revert 248634 and 248643 (e.g., restoring 248625 and 248639). Build verified by: Glen Barber (gjb@)
|
#
115f80b8 |
|
22-Mar-2013 |
Sean Bruno <sbruno@FreeBSD.org> |
Revert svn r248625 Clang errors around printf could be trivially fixed, but the breakage in sbin/fsdb were to significant for this type of change. Submitter of this changeset has been notified and hopefully this can be restored soon.
|
#
776816d3 |
|
22-Mar-2013 |
Kirk McKusick <mckusick@FreeBSD.org> |
Speed up fsck by caching the cylinder group maps in pass1 so that they do not need to be read again in pass5. As this nearly doubles the memory requirement for fsck, the cache is thrown away if other memory needs in fsck would otherwise fail. Thus, the memory footprint of fsck remains unchanged in memory constrained environments. This work was inspired by a paper presented at Usenix's FAST '13: www.usenix.org/conference/fast13/ffsck-fast-file-system-checker Details of this implementation appears in the April 2013 of ;login: www.usenix.org/publications/login/april-2013-volume-38-number-2. A copy of the April 2013 ;login: paper can also be downloaded from: www.mckusick.com/publications/faster_fsck.pdf. Reviewed by: kib Tested by: Peter Holm MFC after: 4 weeks
|
#
f2e472dc |
|
25-Feb-2013 |
Tim Kientzle <kientzle@FreeBSD.org> |
Fix ARM build by assigning the computed time here to a variable of the right type for printf.
|
#
ed75b5a1 |
|
23-Feb-2013 |
Kirk McKusick <mckusick@FreeBSD.org> |
When running with the -d option, instrument fsck_ffs to track the number, data type, and running time of its I/O operations. No functional changes.
|
#
2ec5c914 |
|
14-Feb-2013 |
Kirk McKusick <mckusick@FreeBSD.org> |
Update fsck_ffs buffer cache manager to use TAILQ macros. No functional changes.
|
#
623d7cb6 |
|
27-Sep-2012 |
Matthew D Fleming <mdf@FreeBSD.org> |
Fix fsck_ffs build with a 64-bit ino_t. Original code by: Gleb Kurtsou
|
#
4a835375 |
|
12-Sep-2012 |
David E. O'Brien <obrien@FreeBSD.org> |
Remove needless (int) casts of write(2)'s 3rd argument. Also change blwrite() 'size' parameter to a ssize_t to better match write(2).
|
#
4b85a12f |
|
07-Jan-2012 |
Ulrich Spörlein <uqs@FreeBSD.org> |
Spelling fixes for sbin/
|
#
8d3dfc26 |
|
29-Apr-2011 |
Dag-Erling Smørgrav <des@FreeBSD.org> |
Add an -E option to mirror newfs's. The idea is that if you have a system that was built before ffs grew support for TRIM, your filesystem will have plenty of free blocks that the flash chip doesn't know are free, so it can't take advantage of them for wear leveling. Once you've upgraded your kernel, you enable TRIM on the filesystem (tunefs -t enable), then run fsck_ffs -E on it before mounting it. I tested this patch by half-filling an mdconfig'ed filesystem image, running fsck_ffs -E on it, then verifying that the contents were not damaged by comparing them to a pristine copy using rsync's checksum functionality. There is no reliable way to test it on real hardware. Many thanks to mckusick@, who provided the tricky parts of this patch and reviewed the final version. Reviewed by: mckusick@ MFC after: 3 weeks
|
#
a7d5f7eb |
|
19-Oct-2010 |
Jamie Gritton <jamie@FreeBSD.org> |
A new jail(8) with a configuration file, to replace the work currently done by /etc/rc.d/jail.
|
#
fe0506d7 |
|
09-Mar-2010 |
Marcel Moolenaar <marcel@FreeBSD.org> |
Create the altix project branch. The altix project will add support for the SGI Altix 350 to FreeBSD/ia64. The hardware used for porting is a two-module system, consisting of a base compute module and a CPU expansion module. SGI's NUMAFlex architecture can be an excellent platform to test CPU affinity and NUMA-aware features in FreeBSD.
|
#
1d0daf9e |
|
10-Feb-2010 |
Kirk McKusick <mckusick@FreeBSD.org> |
MFC of r201700 | mckusick | 2010-01-06 This corrects a bug that manifested itself as identifying the last cylinder group of a UFS1 filesystem as bad. The error was in the check and not in the cylinder group itself. So even though fsck fixed the cylinder group correctly, it was still endlessly reported as bad. This bug first appeared in 8.0 so does not apply to earlier releases. PR: 141992 Reported by: Dan Strick
|
#
36ef6b65 |
|
06-Jan-2010 |
Kirk McKusick <mckusick@FreeBSD.org> |
This corrects a bug that manifested itself as identifying the last cylinder group of a UFS1 filesystem as bad. The error was in the check and not in the cylinder group itself. So even though fsck fixed the cylinder group correctly, it was still endlessly reported as bad. PR: 141992 MFC after: 2 weeks Reported by: Dan Strick
|
#
910b491e |
|
03-Feb-2009 |
Kirk McKusick <mckusick@FreeBSD.org> |
Update the actions previously attempted by the -D option to make them robust. With these changes fsck is now able to detect and reliably rebuild corrupted cylinder group maps. The -D option is no longer necessary as it has been replaced by a prompt asking whether the corrupted cylinder group should be rebuilt and doing so when requested. These actions are only offered and taken when running fsck in manual mode. Corrupted cylinder groups found during preen mode cause the fsck to fail. Add the -r option to free up excess unused inodes. Decreasing the number of preallocated inodes reduces the running time of future runs of fsck and frees up space that can allocated to files. The -r option is ignored when running in preen mode. Reviewed by: Xin LI <delphij@> Sponsored by: Rsync.net
|
#
ffed8dfb |
|
26-Jan-2009 |
Xin LI <delphij@FreeBSD.org> |
Follow up with previous commit: mention -D, not -C when cg check failed. Submitted by: obrien
|
#
7f94ca72 |
|
20-Jan-2009 |
Xin LI <delphij@FreeBSD.org> |
Rename option 'C' to 'D' (damaged) in order to avoid a conflict with upcoming Juniper 'C' (clean) flag. Requested by: obrien MFC after: 1 week
|
#
d7f03759 |
|
19-Oct-2008 |
Ulf Lilleengen <lulf@FreeBSD.org> |
- Import the HEAD csup code which is the basis for the cvsmode work.
|
#
14320f1e |
|
10-Apr-2008 |
Xin LI <delphij@FreeBSD.org> |
Add a new flag, '-C' which enables a special mode that is intended for catastrophic recovery. Currently, this mode only validates whether a cylindergroup has good signature data, and prompts the user to decide whether to clear it as a whole. This mode is useful when there is data damage on a disk and you are working on copy of the original disk, as fsck_ffs(8) tends to abnormally exit in such case, as a last resort to recover data from the disk.
|
#
aef8d244 |
|
31-Oct-2006 |
Pawel Jakub Dawidek <pjd@FreeBSD.org> |
Implements gjournal support. If file system has gjournal support enabled and -p flag was given perform fast file system checking (bascially only garbage collecting of orphaned objects). Rename bread() to blread() and bwrite() to blwrite() as we now link to the libufs library, which also implement functions with that names. Sponsored by: home.pl
|
#
af6726e6 |
|
08-Oct-2004 |
Don Lewis <truckman@FreeBSD.org> |
Eliminate linked list used to track inodes with an initial link count of zero and instead encode this information in the inode state. Pass 4 performed a linear search of this list for each inode in the file system, which performs poorly if the list is long. Reviewed by: sam & keramida (an earlier version of the patch), mckusick MFC after: 1 month
|
#
08983aee |
|
18-May-2004 |
Scott Long <scottl@FreeBSD.org> |
Improve the delay algorithm used in bgfsck. From the author: shuffles the timing and sleep calls in bgfsck from: sleep timer_on io timer_off io io io io io io io to sleep io io io io io io io timer_on io timer_off The original method basically guaranteed that the timed I/O included a disk seek every time, which made bgfsck sleep for much longer than necessary. Submitted by: Dan Nelson Reviewed by: kirk
|
#
4c723140 |
|
09-Apr-2004 |
Mark Murray <markm@FreeBSD.org> |
Remove advertising clause from University of California Regent's license, per letter dated July 22, 1999. Approved by: core, imp
|
#
e4e07764 |
|
01-Aug-2003 |
Ruslan Ermilov <ru@FreeBSD.org> |
Spell "file system" correctly.
|
#
c69284ca |
|
03-May-2003 |
David E. O'Brien <obrien@FreeBSD.org> |
Use __FBSDID() to quiet GCC 3.3 warnings.
|
#
9d580d7c |
|
07-Dec-2002 |
Ian Dowse <iedowse@FreeBSD.org> |
Slow down the operation of background fsck so as to leave some disk bandwidth for other processes. Since the sleeping is done from userland, this avoids the locking issues that affected the kernel version. The algorithm used here is to measure a moving average of the times taken by a sample of read operations and then delay 1 in 8 reads by 16 times the measured average. This should correspond to a factor of 3 slowdown, but in practice the factor is larger (3.5 to 4) due to hz rounding effects. Reviewed by: mckusick Approved by: re
|
#
ada981b2 |
|
26-Nov-2002 |
Kirk McKusick <mckusick@FreeBSD.org> |
Create a new 32-bit fs_flags word in the superblock. Add code to move the old 8-bit fs_old_flags to the new location the first time that the filesystem is mounted by a new kernel. One of the unused flags in fs_old_flags is used to indicate that the flags have been moved. Leave the fs_old_flags word intact so that it will work properly if used on an old kernel. Change the fs_sblockloc superblock location field to be in units of bytes instead of in units of filesystem fragments. The old units did not work properly when the fragment size exceeeded the superblock size (8192). Update old fs_sblockloc values at the same time that the flags are moved. Suggested by: BOUWSMA Barry <freebsd-misuser@netscum.dyndns.dk> Sponsored by: DARPA & NAI Labs.
|
#
68aff084 |
|
18-Oct-2002 |
Kirk McKusick <mckusick@FreeBSD.org> |
Clear the pending counts in the superblock after a successful run of fsck so that the kernel does not complain about them being non-zero when the filesystem is mounted. Sponsored by: DARPA & NAI Labs.
|
#
ce66ddb7 |
|
21-Aug-2002 |
Tom Rhodes <trhodes@FreeBSD.org> |
s/filesystem/file system/g as discussed on -developers
|
#
84fc0d7e |
|
30-Jul-2002 |
Maxime Henrion <mux@FreeBSD.org> |
Fix a bunch of format string warnings which broke the sparc64 build. Tested on: sparc64, i386
|
#
599304a4 |
|
30-Jul-2002 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Warning cleanup. Format changes by peter
|
#
1c85e6a3 |
|
21-Jun-2002 |
Kirk McKusick <mckusick@FreeBSD.org> |
This commit adds basic support for the UFS2 filesystem. The UFS2 filesystem expands the inode to 256 bytes to make space for 64-bit block pointers. It also adds a file-creation time field, an ability to use jumbo blocks per inode to allow extent like pointer density, and space for extended attributes (up to twice the filesystem block size worth of attributes, e.g., on a 16K filesystem, there is space for 32K of attributes). UFS2 fully supports and runs existing UFS1 filesystems. New filesystems built using newfs can be built in either UFS1 or UFS2 format using the -O option. In this commit UFS1 is the default format, so if you want to build UFS2 format filesystems, you must specify -O 2. This default will be changed to UFS2 when UFS2 proves itself to be stable. In this commit the boot code for reading UFS2 filesystems is not compiled (see /sys/boot/common/ufsread.c) as there is insufficient space in the boot block. Once the size of the boot block is increased, this code can be defined. Things to note: the definition of SBSIZE has changed to SBLOCKSIZE. The header file <ufs/ufs/dinode.h> must be included before <ufs/ffs/fs.h> so as to get the definitions of ufs2_daddr_t and ufs_lbn_t. Still TODO: Verify that the first level bootstraps work for all the architectures. Convert the utility ffsinfo to understand UFS2 and test growfs. Add support for the extended attribute storage. Update soft updates to ensure integrity of extended attribute storage. Switch the current extended attribute interfaces to use the extended attribute storage. Add the extent like functionality (framework is there, but is currently never used). Sponsored by: DARPA & NAI Labs. Reviewed by: Poul-Henning Kamp <phk@freebsd.org>
|
#
381ee4c2 |
|
12-May-2002 |
Poul-Henning Kamp <phk@FreeBSD.org> |
UFS2 preparation commit: Remove support for converting old FFS formats to newer. Submitted by: mckusick Sponspored by: DARPA & NAI Labs.
|
#
77068a7f |
|
12-May-2002 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Retire the bogus uses of the disklabel field d_sbsize and begin to initialize it to zero so we don't have to have everbody and their aunt including FFS specific header files. Sponsored by: DARPA & NAI Labs.
|
#
088f357d |
|
01-May-2002 |
Kirk McKusick <mckusick@FreeBSD.org> |
Minor bug fixes uncovered while working on UFS2. They should have no effect on existing systems.
|
#
b70cd7ee |
|
20-Mar-2002 |
Warner Losh <imp@FreeBSD.org> |
o __P removed o ansi function prototypes o unifdef -D__STDC__ o __dead2 on usage prototype o remove now-bogus main prototype
|
#
3d438ad6 |
|
20-Mar-2002 |
David E. O'Brien <obrien@FreeBSD.org> |
Remove 'register' keyword. It does not help modern compilers, and some may take some hit from it. (I also found several functions that listed *every* of its 10 local vars with "register" -- just how many free registers do people think machines have?)
|
#
bf58d635 |
|
17-Nov-2001 |
Ian Dowse <iedowse@FreeBSD.org> |
Fix a large number of -Wall, -Wformat and -W compiler warnings. These were mainly missing casts or wrong format strings in printf statements, but there were also missing includes, unused variables, functions and arguments. The choice of `long' vs `int' still seems almost random in a lot of places though.
|
#
5979df34 |
|
19-Aug-2001 |
Kris Kennaway <kris@FreeBSD.org> |
Silence non-constant format string warnings by marking functions as __printflike()/__printf0like(), adding const, or adding missing "%s" format strings, as appropriate. MFC after: 2 weeks
|
#
15fca934 |
|
24-Apr-2001 |
Kirk McKusick <mckusick@FreeBSD.org> |
Add support for the -F flag which determines whether a specified filesystem needs foreground checking (usually at boot time) or can defer to background checking (after the system is up and running). See the manual page, fsck_ffs(8), for details on the -F and -B options. These options are primarily intended for use by the fsck front end. All output is directed to stdout so that the output is coherent when redirected to a file or a pipe. Unify the code with the fsck front end that allows either a device or a mount point to be specified as the argument to be checked.
|
#
38375c40 |
|
16-Apr-2001 |
Kirk McKusick <mckusick@FreeBSD.org> |
Minor background cleanups: 1) Set the FS_NEEDSFSCK flag when unexpected problems are encountered. 2) Clear the FS_NEEDSFSCK flag after a successful foreground cleanup. 3) Refuse to run in background when the FS_NEEDSFSCK flag is set. 4) Avoid taking and removing a snapshot when the filesystem is already clean. 5) Properly implement the force cleaning (-f) flag when in preen mode. Note that you need to have revision 1.21 (date: 2001/04/14 05:26:28) of fs.h installed in <ufs/ffs/fs.h> defining FS_NEEDSFSCK for this to compile.
|
#
7578c6ab |
|
21-Mar-2001 |
Kirk McKusick <mckusick@FreeBSD.org> |
Additions to run checks on live filesystems. This change will not affect current systems until fsck is modified to use these new facilities. To try out this change, set the fsck passno to zero in /etc/fstab to cause the filesystem to be mounted without running fsck, then run `fsck_ffs -p -B <filesystem>' after the system has been brought up multiuser to run a background cleanup on <filesystem>. Note that the <filesystem> in question must have soft updates enabled.
|
#
f55ff3f3 |
|
15-Jan-2001 |
Ian Dowse <iedowse@FreeBSD.org> |
The ffs superblock includes a 128-byte region for use by temporary in-core pointers to summary information. An array in this region (fs_csp) could overflow on filesystems with a very large number of cylinder groups (~16000 on i386 with 8k blocks). When this happens, other fields in the superblock get corrupted, and fsck refuses to check the filesystem. Solve this problem by replacing the fs_csp array in 'struct fs' with a single pointer, and add padding to keep the length of the 128-byte region fixed. Update the kernel and userland utilities to use just this single pointer. With this change, the kernel no longer makes use of the superblock fields 'fs_csshift' and 'fs_csmask'. Add a comment to newfs/mkfs.c to indicate that these fields must be calculated for compatibility with older kernels. Reviewed by: mckusick
|
#
a8d00279 |
|
09-Oct-2000 |
Adrian Chadd <adrian@FreeBSD.org> |
.. forgot a ; at the end of the $FreeBSD$ string. How did I actually forget this? :-) It builds again.
|
#
4336716b |
|
09-Oct-2000 |
Adrian Chadd <adrian@FreeBSD.org> |
Some missed magic in the fsck wrapper commit which is required by other utilities which use bits of fsck_ffs - namely quotacheck and fsdb. In depth, utilities.c contains blockcheck() which is needed by both, but also a slew of routines which require bits of the FFS code to be compiled in. This breaks the fs-specific and non-fs-specific code up into two files (well, blockcheck() is the only routine in utilities.c, that'll change later) which makes building fsck_ffs, quotacheck and fsdb work yet again. (You won't find commits to fsdb and quotacheck here before I haven't committed the post-fsck-wrappers version of them yet.)
|