NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/60746: kernel diagnostic assertion "ino >= LFS_IFILE_INUM" failed: file "../../../../ufs/lfs/lfs_vfsops.c", line 1800



The following reply was made to PR kern/60746; it has been noted by GNATS.

From: Konrad Schroder <perseant%hhhh.org@localhost>
To: Shinichi Doyashiki <clare%csel.org@localhost>, gnats-bugs%netbsd.org@localhost
Cc: 
Subject: Re: kern/60746: kernel diagnostic assertion "ino >= LFS_IFILE_INUM"
 failed: file "../../../../ufs/lfs/lfs_vfsops.c", line 1800
Date: Sat, 19 Sep 2026 19:01:58 -0700

 This is a multi-part message in MIME format.
 --------------rbtwDHr4befo22IMnqXtP99X
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 8bit
 
 On 9/19/2026 3:26 PM, Shinichi Doyashiki wrote:
 >> after the patch applied, I got following result.
 >>
 >> [ 152.8764894] panic: kernel diagnostic assertion "ino >= LFS_IFILE_INUM" failed: file "../../../../ufs/lfs/lfs_kclean.c", line 674
 
 Okay, something else is wrong.  We should never see an FINFO for a 
 non-positive inode number.  I'm very curious what it is writing.  Could 
 you please try the following/attached patch instead, and when it panics, 
 send both the panic message and the output of "dumplfs -s <segment 
 number> /dev/rdk4" for the segment it reports?
 
 Index: sys/ufs/lfs/lfs_kclean.c
 ===================================================================
 RCS file: /cvsroot/src/sys/ufs/lfs/lfs_kclean.c,v
 retrieving revision 1.4
 diff -u -r1.4 lfs_kclean.c
 --- sys/ufs/lfs/lfs_kclean.c    5 Jan 2026 05:02:47 -0000  1.4
 +++ sys/ufs/lfs/lfs_kclean.c    20 Sep 2026 01:36:47 -0000
 @@ -616,9 +616,21 @@
          for (i = num; i-- > 0; ) {
                  dip = DINO_IN_BLOCK(fs, dbp->b_data, i);
                  ino = lfs_dino_getinumber(fs, dip);
 +               KASSERTMSG((ino >= LFS_IFILE_INUM),
 +                       "nonpositive inum: %lld at offset 0x%lx (seg 
 %ld)\n",
 +                               (long long)ino,
 +                               (unsigned long)offset,
 +                               (long)lfs_dtosn(fs, offset));
                  if (ino == LFS_IFILE_INUM) {
                          /* Check address against superblock */
                          true_addr = lfs_sb_getidaddr(fs);
 +               } else if (ino >= LFS_MAXINO(fs)) {
 +                       /*
 +                        * An inode greater than we have must be from a
 +                        * previous allocation that was not rolled forward.
 +                        * For our purposes, it does not exist.
 +                        */
 +                       continue;
                  } else {
                          /* Not ifile.  Check address against ifile. */
                          LFS_IENTRY(ifp, fs, ino, ibp);
 @@ -655,6 +674,22 @@
          /* Get the inode and check its version. */
          ino = lfs_fi_getino(fs, fip);
          gen = lfs_fi_getversion(fs, fip);
 +
 +       KASSERTMSG((ino >= LFS_IFILE_INUM),
 +               "FINFO with nonpositive inum: %lld at offset 0x%lx (seg 
 %ld)\n",
 +                       (long long)ino,
 +                       (unsigned long)*offsetp,
 +                       (long)lfs_dtosn(fs, *offsetp));
 +       KASSERTMSG((lfs_fi_getnblocks(fs, fip) > 0),
 +               "FINFO with nonpositive count: %d at offset 0x%lx (seg 
 %ld)\n",
 +                       (int)lfs_fi_getnblocks(fs, fip),
 +                       (unsigned long)*offsetp,
 +                       (long)lfs_dtosn(fs, *offsetp));
 +
 +       /* We can safely ignore this; see comment in ino_func_checkempty. */
 +       if (ino >= LFS_MAXINO(fs))
 +               return 0;
 +
          error = VFS_VGET(fs->lfs_ivnode->v_mount, ino, 
 LK_EXCLUSIVE|LK_NOWAIT, &vp);
 
          /*
 
 Thanks,
 
 --
 Konrad Schroder
 perseant%hhhh.org@localhost
 
 --------------rbtwDHr4befo22IMnqXtP99X
 Content-Type: text/plain; charset=UTF-8; name="60746b.diff"
 Content-Disposition: attachment; filename="60746b.diff"
 Content-Transfer-Encoding: base64
 
 SW5kZXg6IHN5cy91ZnMvbGZzL2xmc19rY2xlYW4uYwo9PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
 OiAvY3Zzcm9vdC9zcmMvc3lzL3Vmcy9sZnMvbGZzX2tjbGVhbi5jLHYKcmV0cmlldmluZyBy
 ZXZpc2lvbiAxLjQKZGlmZiAtdSAtcjEuNCBsZnNfa2NsZWFuLmMKLS0tIHN5cy91ZnMvbGZz
 L2xmc19rY2xlYW4uYwk1IEphbiAyMDI2IDA1OjAyOjQ3IC0wMDAwCTEuNAorKysgc3lzL3Vm
 cy9sZnMvbGZzX2tjbGVhbi5jCTIwIFNlcCAyMDI2IDAxOjM2OjQ3IC0wMDAwCkBAIC02MTYs
 OSArNjE2LDIxIEBACiAJZm9yIChpID0gbnVtOyBpLS0gPiAwOyApIHsKIAkJZGlwID0gRElO
 T19JTl9CTE9DSyhmcywgZGJwLT5iX2RhdGEsIGkpOwogCQlpbm8gPSBsZnNfZGlub19nZXRp
 bnVtYmVyKGZzLCBkaXApOworCQlLQVNTRVJUTVNHKChpbm8gPj0gTEZTX0lGSUxFX0lOVU0p
 LAorCQkJIm5vbnBvc2l0aXZlIGludW06ICVsbGQgYXQgb2Zmc2V0IDB4JWx4IChzZWcgJWxk
 KVxuIiwKKwkJCQkobG9uZyBsb25nKWlubywKKwkJCQkodW5zaWduZWQgbG9uZylvZmZzZXQs
 CisJCQkJKGxvbmcpbGZzX2R0b3NuKGZzLCBvZmZzZXQpKTsKCQlpZiAoaW5vID09IExGU19J
 RklMRV9JTlVNKSB7CiAJCQkvKiBDaGVjayBhZGRyZXNzIGFnYWluc3Qgc3VwZXJibG9jayAq
 LwogCQkJdHJ1ZV9hZGRyID0gbGZzX3NiX2dldGlkYWRkcihmcyk7CisJCX0gZWxzZSBpZiAo
 aW5vID49IExGU19NQVhJTk8oZnMpKSB7CisJCQkvKgorCQkJICogQW4gaW5vZGUgZ3JlYXRl
 ciB0aGFuIHdlIGhhdmUgbXVzdCBiZSBmcm9tIGEKKwkJCSAqIHByZXZpb3VzIGFsbG9jYXRp
 b24gdGhhdCB3YXMgbm90IHJvbGxlZCBmb3J3YXJkLgorCQkJICogRm9yIG91ciBwdXJwb3Nl
 cywgaXQgZG9lcyBub3QgZXhpc3QuCisJCQkgKi8KKwkJCWNvbnRpbnVlOwogCQl9IGVsc2Ug
 ewogCQkJLyogTm90IGlmaWxlLiAgQ2hlY2sgYWRkcmVzcyBhZ2FpbnN0IGlmaWxlLiAqLwog
 CQkJTEZTX0lFTlRSWShpZnAsIGZzLCBpbm8sIGlicCk7CkBAIC02NTUsNiArNjc0LDIyIEBA
 CiAJLyogR2V0IHRoZSBpbm9kZSBhbmQgY2hlY2sgaXRzIHZlcnNpb24uICovCiAJaW5vID0g
 bGZzX2ZpX2dldGlubyhmcywgZmlwKTsKIAlnZW4gPSBsZnNfZmlfZ2V0dmVyc2lvbihmcywg
 ZmlwKTsKKworCUtBU1NFUlRNU0coKGlubyA+PSBMRlNfSUZJTEVfSU5VTSksCisJCSJGSU5G
 TyB3aXRoIG5vbnBvc2l0aXZlIGludW06ICVsbGQgYXQgb2Zmc2V0IDB4JWx4IChzZWcgJWxk
 KVxuIiwKKwkJCShsb25nIGxvbmcpaW5vLAorCQkJKHVuc2lnbmVkIGxvbmcpKm9mZnNldHAs
 CisJCQkobG9uZylsZnNfZHRvc24oZnMsICpvZmZzZXRwKSk7CisJS0FTU0VSVE1TRygobGZz
 X2ZpX2dldG5ibG9ja3MoZnMsIGZpcCkgPiAwKSwKKwkJIkZJTkZPIHdpdGggbm9ucG9zaXRp
 dmUgY291bnQ6ICVkIGF0IG9mZnNldCAweCVseCAoc2VnICVsZClcbiIsCisJCQkoaW50KWxm
 c19maV9nZXRuYmxvY2tzKGZzLCBmaXApLAorCQkJKHVuc2lnbmVkIGxvbmcpKm9mZnNldHAs
 CisJCQkobG9uZylsZnNfZHRvc24oZnMsICpvZmZzZXRwKSk7CisKKwkvKiBXZSBjYW4gc2Fm
 ZWx5IGlnbm9yZSB0aGlzOyBzZWUgY29tbWVudCBpbiBpbm9fZnVuY19jaGVja2VtcHR5LiAq
 LworCWlmIChpbm8gPj0gTEZTX01BWElOTyhmcykpCisJCXJldHVybiAwOworCiAJZXJyb3Ig
 PSBWRlNfVkdFVChmcy0+bGZzX2l2bm9kZS0+dl9tb3VudCwgaW5vLCBMS19FWENMVVNJVkV8
 TEtfTk9XQUlULCAmdnApOwogCiAJLyoK
 
 --------------rbtwDHr4befo22IMnqXtP99X--
 



Home | Main Index | Thread Index | Old Index