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.