Subject: Re: Netscape 2.0beta1 - Port of HotJava to FreeBSD and NetBSD More Usefull?
To: The Grey Wolf <>
From: Terry Lambert <>
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

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

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

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
Any opinions in this posting are my own and not those of my present
or previous employers.