Coda File System

Re: NetBSD 1.6 hanging on venus startup

From: Jan Harkes <jaharkes_at_cs.cmu.edu>
Date: Tue, 31 Dec 2002 14:52:52 -0500
On Tue, Dec 31, 2002 at 09:05:17AM -0500, Greg Troxel wrote:
> I wonder if the 'wait 5 minutes' is because venus gets some signal
> which triggers the wakeup.

I believe the NetBSD kernel module automatically returns when it is
waiting for the reply to an upcall for about 5 minutes.

> I thought I figured out how we end up in coda_call, but realize I was
> thrown off by emacs tags lack of case sensitivity.  So I don't see
> how getNewVnode ever gets called.

As far as I know, which mostly based on the Linux kernel module, the
kernel makes 2 upcalls when it is mounted. The first is to get the FID
of the root object, the second is to get the attributes. I'm not sure
whether NetBSD needs to do this, there are a bunch of differences in the
venus code between the two.

worker.cc:263 void VFSMount()
    /* Linux Coda filesystems are mounted by hand through forking since
     * they need venus. XXX eliminate zombie */ 

So Linux forks off a child that performs the mount syscall which blocks
until the mount completes. At the same time the parent can handle the 2
upcalls that are needed to complete the mount operation.

The code in venus that handles mounting on *BSD is very different. It
first tries to unmount any existing tree and then does a mount syscall,
I guess it isn't expecting upcalls during this operation.

So either we have to figure out why getNewVnode is called, or use the
trick that is used for Linux and fork off a child process to perform the
mount syscall.

Jan
Received on 2002-12-31 14:54:33