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: Fri, 25 Sep 2026 10:48:43 -0700

 This is a multi-part message in MIME format.
 --------------1ICMcNrdMGC2G0d0FSb0T9IP
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 8bit
 
 On 9/22/2026 1:35 PM, Shinichi Doyashiki via gnats wrote:
 >   [  70.5795566] panic: lfs_writeinode: looping
 >   [  70.5795566] cpu1: Begin traceback...
 >   [  70.5795566] vpanic() at netbsd:vpanic+0x171
 >   [  70.5895550] panic() at netbsd:panic+0x3c
 >   [  70.5895550] lfs_writeinode() at netbsd:lfs_writeinode+0xed2
 >   [  70.5995568] lfs_segwrite() at netbsd:lfs_segwrite+0x469
 
 This is really a different problem, but please try the following patch 
 (on top of some preparatory commits I made a day or two ago; patch also 
 attached):
 
 Index: sys/ufs/lfs/lfs_accessors.h
 ===================================================================
 RCS file: /cvsroot/src/sys/ufs/lfs/lfs_accessors.h,v
 retrieving revision 1.58
 diff -u -r1.58 lfs_accessors.h
 --- sys/ufs/lfs/lfs_accessors.h 23 Sep 2026 17:47:52 -0000 1.58
 +++ sys/ufs/lfs/lfs_accessors.h 25 Sep 2026 17:34:25 -0000
 @@ -663,11 +663,15 @@
   #ifdef _KERNEL
   # define SHARE_IFLOCK(F)        \
     do {        \
 -       rw_enter(&(F)->lfs_iflock, RW_READER);               \
 +       if (!rw_write_held(&(F)->lfs_iflock)) {                \
 +               rw_enter(&(F)->lfs_iflock, RW_READER);               \
 +       }        \
     } while(0)
   # define UNSHARE_IFLOCK(F)        \
     do {        \
 -       rw_exit(&(F)->lfs_iflock);               \
 +       if (!rw_write_held(&(F)->lfs_iflock)) {                \
 +               rw_exit(&(F)->lfs_iflock);               \
 +       }        \
     } while(0)
   #else /* ! _KERNEL */
   # define SHARE_IFLOCK(F)
 @@ -689,17 +693,18 @@
                          ((IN) & (lfs_sb_getsepb(F) - 1)));             \
          else         \
                  (SP) = (SEGUSE *)(BP)->b_data + ((IN) % 
 lfs_sb_getsepb(F)); \
 -       UNSHARE_IFLOCK(F);         \
   } while (0)
 
   #define LFS_WRITESEGENTRY(SP, F, IN, BP) do {         \
          if (((BP)->b_flags & B_GATHERED) == 0)               \
                  (F)->lfs_flags |= LFS_IFDIRTY;           \
          LFS_BWRITE_LOG(BP);        \
 +       UNSHARE_IFLOCK(F);         \
   } while (0)
 
   #define LFS_RELEASESEGENTRY(SP, F, IN, BP) do {                \
          brelse((BP), 0);         \
 +       UNSHARE_IFLOCK(F);         \
   } while (0)
 
   /*
 @@ -860,7 +865,6 @@
          lfs_sb_getbsize(F), 0, &(BP))) != 0)             \
                  panic("lfs: ifile ino %d read %d", (int)(IN), _e);      \
          LFS_IENTRY_INBLOCK(IP, F, IN, BP);         \
 -       UNSHARE_IFLOCK(F);         \
   } while (0)
   #define LFS_IENTRY_NEXT(IP, F) do { \
          if ((F)->lfs_is64) {           \
 @@ -875,9 +879,11 @@
          if (((BP)->b_flags & B_GATHERED) == 0)               \
                  (F)->lfs_flags |= LFS_IFDIRTY;           \
          LFS_BWRITE_LOG(BP);        \
 +       UNSHARE_IFLOCK(F);         \
   } while (0)
   #define LFS_RELEASEIENTRY(IP, F, IN, BP) do {         \
          brelse((BP), 0);         \
 +       UNSHARE_IFLOCK(F);         \
   } while (0)
 
   #define LFS_DEF_IF_ACCESSOR(type, type32, field) \
 Index: sys/ufs/lfs/lfs_segment.c
 ===================================================================
 RCS file: /cvsroot/src/sys/ufs/lfs/lfs_segment.c,v
 retrieving revision 1.315
 diff -u -r1.315 lfs_segment.c
 --- sys/ufs/lfs/lfs_segment.c   23 Sep 2026 17:47:52 -0000 1.315
 +++ sys/ufs/lfs/lfs_segment.c   25 Sep 2026 17:34:26 -0000
 @@ -1034,14 +1034,18 @@
                  mutex_enter(vp->v_interlock);
                  LIST_FOREACH(bp, &fs->lfs_ivnode->v_dirtyblkhd, b_vnbufs) {
                          if (!(bp->b_flags & B_GATHERED)) {
 -                               DLOG((DLOG_SU, "ifile dirty lbn 0x%lx"
 -                                       " flags 0x%x"
 -                                       " cflags 0x%x"
 -                                       " oflags 0x%x\n",
 -                                       (long)bp->b_lblkno,
 -                                       bp->b_flags,
 -                                       bp->b_cflags,
 -                                       bp->b_oflags));
 +#ifdef DEBUG
 +                               if (count > 2) {
 +                                       printf("ifile dirty lbn 0x%lx"
 +                                               " flags 0x%x"
 +                                               " cflags 0x%x"
 +                                               " oflags 0x%x\n",
 +  (long)bp->b_lblkno,
 +                                               bp->b_flags,
 +                                               bp->b_cflags,
 +  bp->b_oflags);
 +                               }
 +#endif /* DEBUG */
                                  redo = 1;
                                  break;
                          }
 Index: sys/ufs/lfs/lfs_subr.c
 ===================================================================
 RCS file: /cvsroot/src/sys/ufs/lfs/lfs_subr.c,v
 retrieving revision 1.111
 diff -u -r1.111 lfs_subr.c
 --- sys/ufs/lfs/lfs_subr.c      23 Sep 2026 17:47:52 -0000 1.111
 +++ sys/ufs/lfs/lfs_subr.c      25 Sep 2026 17:34:26 -0000
 @@ -688,6 +688,8 @@
          /* Acquire lock */
          fs->lfs_prelock = 1;
          fs->lfs_prelocklwp = curlwp;
 +
 +       rw_enter(&fs->lfs_iflock, RW_WRITER);
    out:
          mutex_exit(&lfs_lock);
 
 @@ -719,6 +721,8 @@
          if (--fs->lfs_prelock == 0) {
                  fs->lfs_prelocklwp = NULL;
                  cv_broadcast(&fs->lfs_prelockcv);
 +
 +               rw_exit(&fs->lfs_iflock);
          }
          mutex_exit(&lfs_lock);
   }
 
 Ideally we would only set the lock in lfs_seglock(), not lfs_prelock(), 
 but there is some chicanery in LFS_GET_HEADFREE whose ramifications I 
 need to understand better before making that change.
 
 Thanks,
 
 --
 Konrad Schroder
 perseant%hhhh.org@localhost
 
 --------------1ICMcNrdMGC2G0d0FSb0T9IP
 Content-Type: text/plain; charset=UTF-8; name="60746f.diff"
 Content-Disposition: attachment; filename="60746f.diff"
 Content-Transfer-Encoding: base64
 
 SW5kZXg6IHN5cy91ZnMvbGZzL2xmc19hY2Nlc3NvcnMuaAo9PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
 aWxlOiAvY3Zzcm9vdC9zcmMvc3lzL3Vmcy9sZnMvbGZzX2FjY2Vzc29ycy5oLHYKcmV0cmll
 dmluZyByZXZpc2lvbiAxLjU4CmRpZmYgLXUgLXIxLjU4IGxmc19hY2Nlc3NvcnMuaAotLS0g
 c3lzL3Vmcy9sZnMvbGZzX2FjY2Vzc29ycy5oCTIzIFNlcCAyMDI2IDE3OjQ3OjUyIC0wMDAw
 CTEuNTgKKysrIHN5cy91ZnMvbGZzL2xmc19hY2Nlc3NvcnMuaAkyNSBTZXAgMjAyNiAxNzoz
 NDoyNSAtMDAwMApAQCAtNjYzLDExICs2NjMsMTUgQEAKICNpZmRlZiBfS0VSTkVMCiAjIGRl
 ZmluZSBTSEFSRV9JRkxPQ0soRikgCQkJCQkJXAogICBkbyB7CQkJCQkJCQkJXAotCXJ3X2Vu
 dGVyKCYoRiktPmxmc19pZmxvY2ssIFJXX1JFQURFUik7CQkJCVwKKwlpZiAoIXJ3X3dyaXRl
 X2hlbGQoJihGKS0+bGZzX2lmbG9jaykpIHsJCQkJXAorCQlyd19lbnRlcigmKEYpLT5sZnNf
 aWZsb2NrLCBSV19SRUFERVIpOwkJCVwKKwl9CQkJCQkJCQlcCiAgIH0gd2hpbGUoMCkKICMg
 ZGVmaW5lIFVOU0hBUkVfSUZMT0NLKEYpCQkJCQkJXAogICBkbyB7CQkJCQkJCQkJXAotCXJ3
 X2V4aXQoJihGKS0+bGZzX2lmbG9jayk7CQkJCQlcCisJaWYgKCFyd193cml0ZV9oZWxkKCYo
 RiktPmxmc19pZmxvY2spKSB7CQkJCVwKKwkJcndfZXhpdCgmKEYpLT5sZnNfaWZsb2NrKTsJ
 CQkJXAorCX0JCQkJCQkJCVwKICAgfSB3aGlsZSgwKQogI2Vsc2UgLyogISBfS0VSTkVMICov
 CiAjIGRlZmluZSBTSEFSRV9JRkxPQ0soRikKQEAgLTY4OSwxNyArNjkzLDE4IEBACiAJCQko
 KElOKSAmIChsZnNfc2JfZ2V0c2VwYihGKSAtIDEpKSk7CQlcCiAJZWxzZQkJCQkJCQkJXAog
 CQkoU1ApID0gKFNFR1VTRSAqKShCUCktPmJfZGF0YSArICgoSU4pICUgbGZzX3NiX2dldHNl
 cGIoRikpOyBcCi0JVU5TSEFSRV9JRkxPQ0soRik7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAog
 I2RlZmluZSBMRlNfV1JJVEVTRUdFTlRSWShTUCwgRiwgSU4sIEJQKSBkbyB7CQkJCVwKIAlp
 ZiAoKChCUCktPmJfZmxhZ3MgJiBCX0dBVEhFUkVEKSA9PSAwKQkJCSAJXAogCQkoRiktPmxm
 c19mbGFncyB8PSBMRlNfSUZESVJUWTsJCQkJXAogCUxGU19CV1JJVEVfTE9HKEJQKTsJCQkJ
 CQlcCisJVU5TSEFSRV9JRkxPQ0soRik7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmlu
 ZSBMRlNfUkVMRUFTRVNFR0VOVFJZKFNQLCBGLCBJTiwgQlApIGRvIHsJCQkJXAogCWJyZWxz
 ZSgoQlApLCAwKTsJCQkJCQlcCisJVU5TSEFSRV9JRkxPQ0soRik7CQkJCQkJXAogfSB3aGls
 ZSAoMCkKIAogLyoKQEAgLTg2MCw3ICs4NjUsNiBAQAogCWxmc19zYl9nZXRic2l6ZShGKSwg
 MCwgJihCUCkpKSAhPSAwKQkJCQlcCiAJCXBhbmljKCJsZnM6IGlmaWxlIGlubyAlZCByZWFk
 ICVkIiwgKGludCkoSU4pLCBfZSk7CVwKIAlMRlNfSUVOVFJZX0lOQkxPQ0soSVAsIEYsIElO
 LCBCUCk7CQkJCVwKLQlVTlNIQVJFX0lGTE9DSyhGKTsJCQkJCQlcCiB9IHdoaWxlICgwKQog
 I2RlZmluZSBMRlNfSUVOVFJZX05FWFQoSVAsIEYpIGRvIHsgXAogCWlmICgoRiktPmxmc19p
 czY0KSB7CQkJCQkJXApAQCAtODc1LDkgKzg3OSwxMSBAQAogCWlmICgoKEJQKS0+Yl9mbGFn
 cyAmIEJfR0FUSEVSRUQpID09IDApCQkJCVwKIAkJKEYpLT5sZnNfZmxhZ3MgfD0gTEZTX0lG
 RElSVFk7CQkJCVwKIAlMRlNfQldSSVRFX0xPRyhCUCk7CQkJCQkJXAorCVVOU0hBUkVfSUZM
 T0NLKEYpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAjZGVmaW5lIExGU19SRUxFQVNFSUVOVFJZ
 KElQLCBGLCBJTiwgQlApIGRvIHsJCQkJXAogCWJyZWxzZSgoQlApLCAwKTsJCQkJCQlcCisJ
 VU5TSEFSRV9JRkxPQ0soRik7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBMRlNf
 REVGX0lGX0FDQ0VTU09SKHR5cGUsIHR5cGUzMiwgZmllbGQpIFwKSW5kZXg6IHN5cy91ZnMv
 bGZzL2xmc19zZWdtZW50LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvc3Jj
 L3N5cy91ZnMvbGZzL2xmc19zZWdtZW50LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzE1
 CmRpZmYgLXUgLXIxLjMxNSBsZnNfc2VnbWVudC5jCi0tLSBzeXMvdWZzL2xmcy9sZnNfc2Vn
 bWVudC5jCTIzIFNlcCAyMDI2IDE3OjQ3OjUyIC0wMDAwCTEuMzE1CisrKyBzeXMvdWZzL2xm
 cy9sZnNfc2VnbWVudC5jCTI1IFNlcCAyMDI2IDE3OjM0OjI2IC0wMDAwCkBAIC0xMDM0LDE0
 ICsxMDM0LDE4IEBACiAJCW11dGV4X2VudGVyKHZwLT52X2ludGVybG9jayk7CiAJCUxJU1Rf
 Rk9SRUFDSChicCwgJmZzLT5sZnNfaXZub2RlLT52X2RpcnR5YmxraGQsIGJfdm5idWZzKSB7
 CiAJCQlpZiAoIShicC0+Yl9mbGFncyAmIEJfR0FUSEVSRUQpKSB7Ci0JCQkJRExPRygoRExP
 R19TVSwgImlmaWxlIGRpcnR5IGxibiAweCVseCIKLQkJCQkJIiBmbGFncyAweCV4IgotCQkJ
 CQkiIGNmbGFncyAweCV4IgotCQkJCQkiIG9mbGFncyAweCV4XG4iLAotCQkJCQkobG9uZyli
 cC0+Yl9sYmxrbm8sCi0JCQkJCWJwLT5iX2ZsYWdzLAotCQkJCQlicC0+Yl9jZmxhZ3MsCi0J
 CQkJCWJwLT5iX29mbGFncykpOworI2lmZGVmIERFQlVHCisJCQkJaWYgKGNvdW50ID4gMikg
 eworCQkJCQlwcmludGYoImlmaWxlIGRpcnR5IGxibiAweCVseCIKKwkJCQkJCSIgZmxhZ3Mg
 MHgleCIKKwkJCQkJCSIgY2ZsYWdzIDB4JXgiCisJCQkJCQkiIG9mbGFncyAweCV4XG4iLAor
 CQkJCQkJKGxvbmcpYnAtPmJfbGJsa25vLAorCQkJCQkJYnAtPmJfZmxhZ3MsCisJCQkJCQli
 cC0+Yl9jZmxhZ3MsCisJCQkJCQlicC0+Yl9vZmxhZ3MpOworCQkJCX0KKyNlbmRpZiAvKiBE
 RUJVRyAqLwogCQkJCXJlZG8gPSAxOwogCQkJCWJyZWFrOwogCQkJfQpJbmRleDogc3lzL3Vm
 cy9sZnMvbGZzX3N1YnIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9zcmMv
 c3lzL3Vmcy9sZnMvbGZzX3N1YnIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTEKZGlm
 ZiAtdSAtcjEuMTExIGxmc19zdWJyLmMKLS0tIHN5cy91ZnMvbGZzL2xmc19zdWJyLmMJMjMg
 U2VwIDIwMjYgMTc6NDc6NTIgLTAwMDAJMS4xMTEKKysrIHN5cy91ZnMvbGZzL2xmc19zdWJy
 LmMJMjUgU2VwIDIwMjYgMTc6MzQ6MjYgLTAwMDAKQEAgLTY4OCw2ICs2ODgsOCBAQAogCS8q
 IEFjcXVpcmUgbG9jayAqLwogCWZzLT5sZnNfcHJlbG9jayA9IDE7CiAJZnMtPmxmc19wcmVs
 b2NrbHdwID0gY3VybHdwOworCisJcndfZW50ZXIoJmZzLT5sZnNfaWZsb2NrLCBSV19XUklU
 RVIpOwogIG91dDoKIAltdXRleF9leGl0KCZsZnNfbG9jayk7CiAKQEAgLTcxOSw2ICs3MjEs
 OCBAQAogCWlmICgtLWZzLT5sZnNfcHJlbG9jayA9PSAwKSB7CiAJCWZzLT5sZnNfcHJlbG9j
 a2x3cCA9IE5VTEw7CiAJCWN2X2Jyb2FkY2FzdCgmZnMtPmxmc19wcmVsb2NrY3YpOworCisJ
 CXJ3X2V4aXQoJmZzLT5sZnNfaWZsb2NrKTsKIAl9CiAJbXV0ZXhfZXhpdCgmbGZzX2xvY2sp
 OwogfQo=
 
 --------------1ICMcNrdMGC2G0d0FSb0T9IP--
 



Home | Main Index | Thread Index | Old Index