freebsd-skq/sbin/fsck_ffs
Kirk McKusick ac4b20a0a7 After a crash, a file that extends into indirect blocks may end up
shorter than its size resulting in a hole as its final block (which
is a violation of the invarients of the UFS filesystem).

Soft updates will always ensure that the file size is correct when
writing inodes to disk for files that contain only direct block
pointers. However soft updates does not roll back sizes for files
with indirect blocks that it has set to unallocated because their
contents have not yet been written to disk. Hence, the file can
appear to have a hole at its end because the block pointer has been
rolled back to zero when its inode was written to disk. Thus,
fsck_ffs calculates the last allocated block in the file. For files
that extend into indirect blocks, fsck_ffs checks for a size past
the last allocated block of the file and if that is found, shortens
the file to reference the last allocated block thus avoiding having
it reference a hole at its end.

Submitted by: Chuck Silvers <chs@netflix.com>
Tested by:    Chuck Silvers <chs@netflix.com>
MFC after:    1 week
Sponsored by: Netflix
2019-02-25 21:58:19 +00:00
..
dir.c In preparation for adding inode check-hashes, clean up and 2018-11-13 21:40:56 +00:00
ea.c various: general adoption of SPDX licensing ID tags. 2017-11-27 15:37:16 +00:00
fsck_ffs.8 Exit fsck_ffs with non-zero status when file system is not repaired. 2018-01-15 19:25:11 +00:00
fsck.h After a crash, a file that extends into indirect blocks may end up 2019-02-25 21:58:19 +00:00
fsutil.c Make fsck(8) use pread(2). This cuts the number of syscalls by half. 2018-12-15 11:36:20 +00:00
gjournal.c In preparation for adding inode check-hashes, clean up and 2018-11-13 21:40:56 +00:00
globs.c After a crash, a file that extends into indirect blocks may end up 2019-02-25 21:58:19 +00:00
inode.c Ensure that inode updates are properly flushed out during the first 2019-02-19 20:12:12 +00:00
main.c Continuing efforts to provide hardening of FFS. This change adds a 2018-12-11 22:14:37 +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 After a crash, a file that extends into indirect blocks may end up 2019-02-25 21:58:19 +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 After a crash, a file that extends into indirect blocks may end up 2019-02-25 21:58:19 +00:00
suj.c Revert r313780 (UFS_ prefix) 2018-03-17 12:59:55 +00:00
utilities.c General further adoption of SPDX licensing ID tags. 2017-11-20 19:49:47 +00:00