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: gnats-bugs%netbsd.org@localhost, clare%csel.org@localhost
Cc: 
Subject: Re: kern/60746: kernel diagnostic assertion "ino >= LFS_IFILE_INUM"
 failed: file "../../../../ufs/lfs/lfs_vfsops.c", line 1800
Date: Mon, 21 Sep 2026 16:27:57 -0700

 This is a multi-part message in MIME format.
 --------------S5OxQ1zD4Ww8Jw0oBfhZgK93
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 8bit
 
 On 9/19/2026 9:35 PM, Shinichi Doyashiki via gnats wrote:
 >   [  65.9236610] panic: kernel diagnostic assertion "(ino >= LFS_IFILE_INUM)" failed: file "../../../../ufs/lfs/lfs_kclean.c", line 619 nonpositive inum: 0 at offset 0x8bd (seg 34)
 
 Oh, I missed the obvious.  Those inode blocks are padded with zero and 
 should ignore the appearance of inode zero.  It will still panic, 
 however, at the FNFO with inode zero, which is more interesting.  Please 
 try this patch instead (also attached) and give me the dumplfs of that 
 segment:
 
 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    21 Sep 2026 23:26:37 -0000
 @@ -616,9 +616,19 @@
          for (i = num; i-- > 0; ) {
                  dip = DINO_IN_BLOCK(fs, dbp->b_data, i);
                  ino = lfs_dino_getinumber(fs, dip);
 -               if (ino == LFS_IFILE_INUM) {
 +               if (ino == 0) {
 +                       /* The last inode block is zero-padded. Ignore 
 this. */
 +                       continue;
 +               } else 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 +665,18 @@
          /* Get the inode and check its version. */
          ino = lfs_fi_getino(fs, fip);
          gen = lfs_fi_getversion(fs, fip);
 +
 +       KASSERTMSG((lfs_fi_getnblocks(fs, fip) > 0 && ino >= 
 LFS_IFILE_INUM),
 +               "bad FINFO count=%d inum=%lld at offset 0x%lx (seg %ld)\n",
 +                       (int)lfs_fi_getnblocks(fs, fip),
 +                       (long long)ino,
 +                       (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);
 
          /*
 
 I'm especially interested in the dumplfs output of the segment that has 
 the FINFO reporting a non-positive inode number.
 
 Thanks,
 
 -- 
 --
 Konrad Schroder
 perseant%hhhh.org@localhost
 
 --------------S5OxQ1zD4Ww8Jw0oBfhZgK93
 Content-Type: text/plain; charset=UTF-8; name="60746c.diff"
 Content-Disposition: attachment; filename="60746c.diff"
 Content-Transfer-Encoding: base64
 
 SW5kZXg6IHN5cy91ZnMvbGZzL2xmc19rY2xlYW4uYwo9PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
 OiAvY3Zzcm9vdC9zcmMvc3lzL3Vmcy9sZnMvbGZzX2tjbGVhbi5jLHYKcmV0cmlldmluZyBy
 ZXZpc2lvbiAxLjQKZGlmZiAtdSAtcjEuNCBsZnNfa2NsZWFuLmMKLS0tIHN5cy91ZnMvbGZz
 L2xmc19rY2xlYW4uYwk1IEphbiAyMDI2IDA1OjAyOjQ3IC0wMDAwCTEuNAorKysgc3lzL3Vm
 cy9sZnMvbGZzX2tjbGVhbi5jCTIxIFNlcCAyMDI2IDIzOjI2OjM3IC0wMDAwCkBAIC02MTYs
 OSArNjE2LDE5IEBACiAJZm9yIChpID0gbnVtOyBpLS0gPiAwOyApIHsKIAkJZGlwID0gRElO
 T19JTl9CTE9DSyhmcywgZGJwLT5iX2RhdGEsIGkpOwogCQlpbm8gPSBsZnNfZGlub19nZXRp
 bnVtYmVyKGZzLCBkaXApOwotCQlpZiAoaW5vID09IExGU19JRklMRV9JTlVNKSB7CisJCWlm
 IChpbm8gPT0gMCkgeworCQkJLyogVGhlIGxhc3QgaW5vZGUgYmxvY2sgaXMgemVyby1wYWRk
 ZWQuIElnbm9yZSB0aGlzLiAqLworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoaW5vID09
 IExGU19JRklMRV9JTlVNKSB7CiAJCQkvKiBDaGVjayBhZGRyZXNzIGFnYWluc3Qgc3VwZXJi
 bG9jayAqLwogCQkJdHJ1ZV9hZGRyID0gbGZzX3NiX2dldGlkYWRkcihmcyk7CisJCX0gZWxz
 ZSBpZiAoaW5vID49IExGU19NQVhJTk8oZnMpKSB7CisJCQkvKgorCQkJICogQW4gaW5vZGUg
 Z3JlYXRlciB0aGFuIHdlIGhhdmUgbXVzdCBiZSBmcm9tIGEKKwkJCSAqIHByZXZpb3VzIGFs
 bG9jYXRpb24gdGhhdCB3YXMgbm90IHJvbGxlZCBmb3J3YXJkLgorCQkJICogRm9yIG91ciBw
 dXJwb3NlcywgaXQgZG9lcyBub3QgZXhpc3QuCisJCQkgKi8KKwkJCWNvbnRpbnVlOwogCQl9
 IGVsc2UgewogCQkJLyogTm90IGlmaWxlLiAgQ2hlY2sgYWRkcmVzcyBhZ2FpbnN0IGlmaWxl
 LiAqLwogCQkJTEZTX0lFTlRSWShpZnAsIGZzLCBpbm8sIGlicCk7CkBAIC02NTUsNiArNjY1
 LDE4IEBACiAJLyogR2V0IHRoZSBpbm9kZSBhbmQgY2hlY2sgaXRzIHZlcnNpb24uICovCiAJ
 aW5vID0gbGZzX2ZpX2dldGlubyhmcywgZmlwKTsKIAlnZW4gPSBsZnNfZmlfZ2V0dmVyc2lv
 bihmcywgZmlwKTsKKworCUtBU1NFUlRNU0coKGxmc19maV9nZXRuYmxvY2tzKGZzLCBmaXAp
 ID4gMCAmJiBpbm8gPj0gTEZTX0lGSUxFX0lOVU0pLAorCQkiYmFkIEZJTkZPIGNvdW50PSVk
 IGludW09JWxsZCBhdCBvZmZzZXQgMHglbHggKHNlZyAlbGQpXG4iLAorCQkJKGludClsZnNf
 ZmlfZ2V0bmJsb2NrcyhmcywgZmlwKSwKKwkJCShsb25nIGxvbmcpaW5vLAorCQkJKHVuc2ln
 bmVkIGxvbmcpKm9mZnNldHAsCisJCQkobG9uZylsZnNfZHRvc24oZnMsICpvZmZzZXRwKSk7
 CisKKwkvKiBXZSBjYW4gc2FmZWx5IGlnbm9yZSB0aGlzOyBzZWUgY29tbWVudCBpbiBpbm9f
 ZnVuY19jaGVja2VtcHR5LiAqLworCWlmIChpbm8gPj0gTEZTX01BWElOTyhmcykpCisJCXJl
 dHVybiAwOworCiAJZXJyb3IgPSBWRlNfVkdFVChmcy0+bGZzX2l2bm9kZS0+dl9tb3VudCwg
 aW5vLCBMS19FWENMVVNJVkV8TEtfTk9XQUlULCAmdnApOwogCiAJLyoK
 
 --------------S5OxQ1zD4Ww8Jw0oBfhZgK93--
 



Home | Main Index | Thread Index | Old Index