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-all mailing list