Subject: Re: Netscape 2.0beta1 - Port of HotJava to FreeBSD and NetBSD More Usefull?
To: The Grey Wolf <greywolf@defender.VAS.viewlogic.com>
From: Terry Lambert <terry@lambert.org>
List: netbsd-ports
Date: 10/12/1995 11:16:25
> * > I heard there was some fairly good progress being made on a Linux port.
> * > Is this true? Because if the Linux people have a working version, then a
> * > FreeBSD/NetBSD version would be almost trivial from there.
> *
> * Not so. According to Linus (and Alan Cox), Linux has kernel multithreading.
>
> Cool. So when do *we* get it? :-)
When we get kernel preemption. After we get single entry/exit for
user-exposed kernel interfaces and integrate at least some of Jack
Vogel's SMP changes.
Right now, a large chunk of the FS multithreading code is sitting
dormant because I don't know which FS PHK ran ito problems on, the
procfs or ufs. He got a panic on a double free when "DIAGNOSTIC"
was defined. Implication: the cn_pnbuf was freed by an underlying
file system that was missing a patch and by nameifree() being
called.
I suspect the procfs, since it's what has changed recently without any
intervention by me.
I need to have:
cd /sys
find . -type f -print | xargs grep cn_pnbuf /dev/null
Run against a kernel with my recently uploaded patches for FS layering
installed. This will identify the locations where the cn_pnbuf buffer
is freed.
With the patches installed, the only legal place for this to occur is
in the routines nameifree (in kern/vfs_lookup.c) and nfs_nameifree (in
nfs/nfs_subs.c).
Personally, I'm running -stable, not -current, because of the PCI
problems that -current has had recently, so I have no way to do
this myself.
The patches to apply are in freefall:~terry/fs_layer_patch.gz and
freefall:~terry/fs_layer_patch.addendum.
You can probably *make* it work, if there isn't an underlying FS problem,
by using the following patch:
===========================================================================
*** vfs_lookup.c.old Thu Oct 12 11:12:33 1995
--- vfs_lookup.c Thu Oct 12 11:13:12 1995
***************
*** 219,226 ****
{
struct componentname *cnp = &ndp->ni_cnd;
! if( cnp->cn_flags & HASBUF)
FREE(cnp->cn_pnbuf, M_NAMEI);
}
--- 219,228 ----
{
struct componentname *cnp = &ndp->ni_cnd;
! if( cnp->cn_flags & HASBUF) {
FREE(cnp->cn_pnbuf, M_NAMEI);
+ cnp->cn_flags &= ~HASBUF;
+ }
}
===========================================================================
This is, IMO, a kludge.
But then again, so is the "bogus_namei:" label because I didn't want to
integrate the "fail CREATE/RENAME namei() with EEXIST if EXCLUSIVE flag
is set" patches.
Terry Lambert
terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.