Subject: Re: Cloning bdev/cdev devices, step one
To: Bill Studenmund <wrstuden@zembu.com>
From: Jason R Thorpe <thorpej@zembu.com>
List: tech-kern
Date: 07/05/2000 20:32:03
On Wed, Jul 05, 2000 at 07:26:26PM -0700, Bill Studenmund wrote:

 > I guess one other thing I'd had in mind was that we'd make all of these
 > devices "real" devices. So in the kernel config we'd have:
 > 
 > pseudobus at root
 > ccd*	at pseudobus?
 > raid*	at pseudobus?
 > ...

This is certainly another possible approach (although, I don't
particularly like explcitly saying "pseudobus" ... it could all
be done with pseudo-device and hidden inside the guts of the
autoconfiguration code).

It would, however, require Something Else to work .. like a system call
which took a device name, or something.

...otherwise, what do you do the ioctl on?

 > > 	cs = ccd_lookup(DISKUNIT(vp->v_rdev));
 > 
 > Uhm, that's not using the vnode, is it? :-)

For `open' (and `dump'), you use the dev_t ... for everything else,
you don't.

 > I mean that for this code snippet to work, you've got to be saving that cs
 > you allocate below somwhere where ccd_lookup will find it. If that's so,
 > do we need the vnode?

The other part you didn't get the first time (because that's "step two",
and I was trying to focus on "step one")... true cloning devices (like
what bpf and ptys will become) will have a mechanism by which the
upper layer devices will know that they must allocate a new vnode for
each open and not do alias checking ... in those cases, you MUST keep
a pointer to the softc in the vnode, because there is a *separate*
device instance for each open, even though *the dev_t is the same*.

-- 
        -- Jason R. Thorpe <thorpej@zembu.com>