Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 May 2021 21:35:23 GMT
From:      Kirk McKusick <mckusick@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: fe815b88b553 - main - Fix fsck_ffs Pass 1b error exit "bad inode number 256 to nextinode".
Message-ID:  <202105192135.14JLZNFr015132@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by mckusick:

URL: https://cgit.FreeBSD.org/src/commit/?id=fe815b88b553667c40353c46b58f9779efa3570e

commit fe815b88b553667c40353c46b58f9779efa3570e
Author:     Kirk McKusick <mckusick@FreeBSD.org>
AuthorDate: 2021-05-19 21:38:21 +0000
Commit:     Kirk McKusick <mckusick@FreeBSD.org>
CommitDate: 2021-05-19 21:39:24 +0000

    Fix fsck_ffs Pass 1b error exit "bad inode number 256 to nextinode".
    
    Pass 1b of fsck_ffs runs only when Pass 1 has found duplicate blocks.
    Pass 1 only knows that a block is duplicate when it finds the second
    instance of its use. The role of Pass 1b is to find the first use
    of all the duplicate blocks. It makes a pass over the cylinder groups
    looking for these blocks. When moving to the next cylinder group,
    Pass 1b failed to properly calculate the starting inode number for
    the cylinder group resulting in the above error message when it
    tried to read the first inode in the cylinder group.
    
    Reported by:  Px
    Tested by:    Px
    PR:           255979
    MFC after:    3 days
    Sponsored by: Netflix
---
 sbin/fsck_ffs/pass1b.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sbin/fsck_ffs/pass1b.c b/sbin/fsck_ffs/pass1b.c
index b44e0107c982..17a3b6495dc4 100644
--- a/sbin/fsck_ffs/pass1b.c
+++ b/sbin/fsck_ffs/pass1b.c
@@ -60,7 +60,6 @@ pass1b(void)
 	memset(&idesc, 0, sizeof(struct inodesc));
 	idesc.id_func = pass1bcheck;
 	duphead = duplist;
-	inumber = 0;
 	for (c = 0; c < sblock.fs_ncg; c++) {
 		if (got_siginfo) {
 			printf("%s: phase 1b: cyl group %d of %d (%d%%)\n",
@@ -77,6 +76,7 @@ pass1b(void)
 		if (inosused == 0)
 			continue;
 		setinodebuf(c, inosused);
+		inumber = c * sblock.fs_ipg;
 		for (i = 0; i < inosused; i++, inumber++) {
 			if (inumber < UFS_ROOTINO) {
 				(void)getnextinode(inumber, 0);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202105192135.14JLZNFr015132>