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