freebsd-skq/sbin/fsck_ffs
Kirk McKusick a3628327e7 Ensure that files with no allocated blocks are trimmed to zero length.
UFS does not allow files to end with a hole; it requires that the
last block of a file be allocated. As fsck_ffs(8) initially scans
each allocated inode, it tracks the last allocated block in the
inode. It then checks that the inode's size falls in the last
allocated block. If the last allocated block falls before the size,
a `file size beyond end of allocated file' warning is issued and
the file is shortened to reference the last allocated block (to avoid
having it reference a hole at its end). If the last allocated block
falls after the size, a `partially truncated file' warning is issued
and all blocks following the block referenced by the size are freed.

Because of an incorrect unsigned comparison, this test was failing
to handle files with no allocated blocks but non-zero size (which
should have had their size reset to zero). Once that was fixed the
test started incorrectly complaining about short symbolic links
that place the link path in the inode rather than in a disk block.
Because these symbolic links have a non-zero size, but no allocated
blocks, fsck_ffs wanted to zero out their size. This patch has to
detect and avoid changing the size of such symbolic links.

Reported by:  Chuck Silvers
Tested by:    Chuck Silvers
MFC after:    1 week
Sponsored by: Netflix
2021-05-11 14:52:26 -07:00
..
dir.c Make fsck_ffs more persistent in creating a lost+found directory. 2021-04-26 16:48:30 -07:00
ea.c Rewrite the disk I/O management system in fsck_ffs(8). Other than 2021-01-07 15:03:15 -08: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 Ensure that all allocated data structures in fsck_ffs are freed. 2021-04-02 11:58:49 -07:00
fsutil.c Clean up fsck_ffs error message output. 2021-04-26 18:43:51 -07:00
gjournal.c Rewrite the disk I/O management system in fsck_ffs(8). Other than 2021-01-07 15:03:15 -08:00
globs.c Ensure that all allocated data structures in fsck_ffs are freed. 2021-04-02 11:58:49 -07:00
inode.c Make fsck_ffs more persistent in creating a lost+found directory. 2021-04-26 16:48:30 -07:00
main.c Ensure that all allocated data structures in fsck_ffs are freed. 2021-04-02 11:58:49 -07: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 Ensure that files with no allocated blocks are trimmed to zero length. 2021-05-11 14:52:26 -07:00
pass1b.c Fix fsck_ffs Pass 1b error exit "bad inode number 2 to nextinode". 2021-03-24 16:53:28 -07:00
pass2.c Rewrite the disk I/O management system in fsck_ffs(8). Other than 2021-01-07 15:03:15 -08:00
pass3.c Rewrite the disk I/O management system in fsck_ffs(8). Other than 2021-01-07 15:03:15 -08:00
pass4.c Rewrite the disk I/O management system in fsck_ffs(8). Other than 2021-01-07 15:03:15 -08:00
pass5.c Use proper type (ino_t) for inode numbers to avoid improper sign extention 2020-10-25 21:04:07 +00:00
setup.c Rewrite the disk I/O management system in fsck_ffs(8). Other than 2021-01-07 15:03:15 -08:00
suj.c Remove #define _KERNEL hacks from libprocstat 2021-02-21 11:38:21 +02:00
utilities.c Remove unused includes. 2019-12-22 05:44:29 +00:00