git: 8c22cf9b0997 - main - Fix fsck_ffs incorrectly reporting "CANNOT READ BLK: NNNN" errors.
Kirk McKusick
mckusick at FreeBSD.org
Tue Jan 26 19:47:21 UTC 2021
The branch main has been updated by mckusick:
URL: https://cgit.FreeBSD.org/src/commit/?id=8c22cf9b0997566ff6f576cfc9296b29bb055f65
commit 8c22cf9b0997566ff6f576cfc9296b29bb055f65
Author: Kirk McKusick <mckusick at FreeBSD.org>
AuthorDate: 2021-01-26 19:46:38 +0000
Commit: Kirk McKusick <mckusick at FreeBSD.org>
CommitDate: 2021-01-26 19:46:38 +0000
Fix fsck_ffs incorrectly reporting "CANNOT READ BLK: NNNN" errors.
A long-standing bug in Pass 1 of fsck_ffs in which it is reading in
blocks of inodes to check their block pointers. It failed to round
up the size of the read to a disk block size. When disks would
accept 512-byte aligned reads, the bug rarely manifested itself.
But many recent disks will no longer accept 512-byte aligned reads
but require 4096-byte aligned reads, so the failure to properly
round-up read sizes to multiples of 4096 bytes makes the error
much more likely to occur.
Reported by: Peter Holm and others
Tested by: Peter Holm and Rozhuk Ivan
MFC after: 3 days
Sponsored by: Netflix
---
sbin/fsck_ffs/inode.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/sbin/fsck_ffs/inode.c b/sbin/fsck_ffs/inode.c
index 18a015f8187e..60019425c825 100644
--- a/sbin/fsck_ffs/inode.c
+++ b/sbin/fsck_ffs/inode.c
@@ -611,8 +611,9 @@ setinodebuf(int cg, ino_t inosused)
sizeof(struct ufs1_dinode) : sizeof(struct ufs2_dinode));
readpercg = inosused / fullcnt;
partialcnt = inosused % fullcnt;
- partialsize = partialcnt * ((sblock.fs_magic == FS_UFS1_MAGIC) ?
- sizeof(struct ufs1_dinode) : sizeof(struct ufs2_dinode));
+ partialsize = fragroundup(&sblock,
+ partialcnt * ((sblock.fs_magic == FS_UFS1_MAGIC) ?
+ sizeof(struct ufs1_dinode) : sizeof(struct ufs2_dinode)));
if (partialcnt != 0) {
readpercg++;
} else {
More information about the dev-commits-src-main
mailing list