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, kern-bug-people%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost, netbsd-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: Sat, 19 Sep 2026 14:51:07 -0700

 This is a multi-part message in MIME format.
 --------------9Tk9h7Ycl9pEKM2UaSxL1S01
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 8bit
 
 On 9/19/2026 2:15 PM, Shinichi Doyashiki via gnats wrote:
 >   [  87.8094698] panic: kernel diagnostic assertion "ino >= LFS_IFILE_INUM" failed: file "../../../../ufs/lfs/lfs_vfsops.c", line 1800 ino=0
 >   [  87.8294701] cpu1: Begin traceback...
 >   [  87.8294701] vpanic() at netbsd:vpanic+0x171
 >   [  87.8294701] kern_assert() at netbsd:kern_assert+0x4b
 >   [  87.8394674] lfs_loadvnode() at netbsd:lfs_loadvnode+0x610
 >   [  87.8494698] vcache_get() at netbsd:vcache_get+0x1cf
 >   [  87.8494698] lfs_vget() at netbsd:lfs_vget+0x23
 >   [  87.8594672] finfo_func_checkempty() at netbsd:finfo_func_checkempty+0x58
 
 The "ino == 0" makes me think that the segment writer overcounted the 
 number of inodes it put into the inode block.  There is some logic for 
 overwriting an inode that may not be working properly.  It is also 
 possible, of course, that the data that the roll-forward code is trying 
 to recover is corrupt despite having the right checksum.
 
 Could you try this patch (also attached)?
 
 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    19 Sep 2026 21:33:32 -0000
 @@ -616,9 +616,24 @@
          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) {
 +               KASSERT(ino >= 0);
 +               if (ino == 0) {
 +                       /*
 +                        * The segment writer overcounted the number
 +                        * of inodes in this inode block.  We can
 +                        * ignore this inode.  (XXX This should not happen.)
 +                        */
 +                       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 +670,12 @@
          /* Get the inode and check its version. */
          ino = lfs_fi_getino(fs, fip);
          gen = lfs_fi_getversion(fs, fip);
 +
 +       KASSERT(ino >= LFS_IFILE_INUM);
 +       /* 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
 
 --------------9Tk9h7Ycl9pEKM2UaSxL1S01
 Content-Type: text/plain; charset=UTF-8; name="60746a.diff"
 Content-Disposition: attachment; filename="60746a.diff"
 Content-Transfer-Encoding: base64
 
 SW5kZXg6IHN5cy91ZnMvbGZzL2xmc19rY2xlYW4uYwo9PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
 OiAvY3Zzcm9vdC9zcmMvc3lzL3Vmcy9sZnMvbGZzX2tjbGVhbi5jLHYKcmV0cmlldmluZyBy
 ZXZpc2lvbiAxLjQKZGlmZiAtdSAtcjEuNCBsZnNfa2NsZWFuLmMKLS0tIHN5cy91ZnMvbGZz
 L2xmc19rY2xlYW4uYwk1IEphbiAyMDI2IDA1OjAyOjQ3IC0wMDAwCTEuNAorKysgc3lzL3Vm
 cy9sZnMvbGZzX2tjbGVhbi5jCTE5IFNlcCAyMDI2IDIxOjMzOjMyIC0wMDAwCkBAIC02MTYs
 OSArNjE2LDI0IEBACiAJZm9yIChpID0gbnVtOyBpLS0gPiAwOyApIHsKIAkJZGlwID0gRElO
 T19JTl9CTE9DSyhmcywgZGJwLT5iX2RhdGEsIGkpOwogCQlpbm8gPSBsZnNfZGlub19nZXRp
 bnVtYmVyKGZzLCBkaXApOwotCQlpZiAoaW5vID09IExGU19JRklMRV9JTlVNKSB7CisJCUtB
 U1NFUlQoaW5vID49IDApOworCQlpZiAoaW5vID09IDApIHsKKwkJCS8qCisJCQkgKiBUaGUg
 c2VnbWVudCB3cml0ZXIgb3ZlcmNvdW50ZWQgdGhlIG51bWJlcgorCQkJICogb2YgaW5vZGVz
 IGluIHRoaXMgaW5vZGUgYmxvY2suICBXZSBjYW4KKwkJCSAqIGlnbm9yZSB0aGlzIGlub2Rl
 LiAgKFhYWCBUaGlzIHNob3VsZCBub3QgaGFwcGVuLikKKwkJCSAqLworCQkJY29udGludWU7
 CisJCX0gZWxzZSBpZiAoaW5vID09IExGU19JRklMRV9JTlVNKSB7CiAJCQkvKiBDaGVjayBh
 ZGRyZXNzIGFnYWluc3Qgc3VwZXJibG9jayAqLwogCQkJdHJ1ZV9hZGRyID0gbGZzX3NiX2dl
 dGlkYWRkcihmcyk7CisJCX0gZWxzZSBpZiAoaW5vID49IExGU19NQVhJTk8oZnMpKSB7CisJ
 CQkvKgorCQkJICogQW4gaW5vZGUgZ3JlYXRlciB0aGFuIHdlIGhhdmUgbXVzdCBiZSBmcm9t
 IGEKKwkJCSAqIHByZXZpb3VzIGFsbG9jYXRpb24gdGhhdCB3YXMgbm90IHJvbGxlZCBmb3J3
 YXJkLgorCQkJICogRm9yIG91ciBwdXJwb3NlcywgaXQgZG9lcyBub3QgZXhpc3QuCisJCQkg
 Ki8KKwkJCWNvbnRpbnVlOwogCQl9IGVsc2UgewogCQkJLyogTm90IGlmaWxlLiAgQ2hlY2sg
 YWRkcmVzcyBhZ2FpbnN0IGlmaWxlLiAqLwogCQkJTEZTX0lFTlRSWShpZnAsIGZzLCBpbm8s
 IGlicCk7CkBAIC02NTUsNiArNjcwLDEyIEBACiAJLyogR2V0IHRoZSBpbm9kZSBhbmQgY2hl
 Y2sgaXRzIHZlcnNpb24uICovCiAJaW5vID0gbGZzX2ZpX2dldGlubyhmcywgZmlwKTsKIAln
 ZW4gPSBsZnNfZmlfZ2V0dmVyc2lvbihmcywgZmlwKTsKKworCUtBU1NFUlQoaW5vID49IExG
 U19JRklMRV9JTlVNKTsKKwkvKiBXZSBjYW4gc2FmZWx5IGlnbm9yZSB0aGlzOyBzZWUgY29t
 bWVudCBpbiBpbm9fZnVuY19jaGVja2VtcHR5LiAqLworCWlmIChpbm8gPj0gTEZTX01BWElO
 TyhmcykpCisJCXJldHVybiAwOworCiAJZXJyb3IgPSBWRlNfVkdFVChmcy0+bGZzX2l2bm9k
 ZS0+dl9tb3VudCwgaW5vLCBMS19FWENMVVNJVkV8TEtfTk9XQUlULCAmdnApOwogCiAJLyoK
 
 
 --------------9Tk9h7Ycl9pEKM2UaSxL1S01--
 



Home | Main Index | Thread Index | Old Index