Peter Memishian wrote:
> You can use fassign() to bind a vnode to a newly-allocated file descriptor
> in curproc's file descriptor "table".  If that doesn't do quite what you
> need, you can probably build it with falloc() and setf().  Of course, all
> of the above requires that curproc be the right process :-)  To ensure that
> with STREAMS, this sort of work needs to be deferred to the stream head.

This all seems possible (which is good). :-)  I need to connect some dots 
between the possibilities...

It seems like there are a couple of ways to go forward:

1. have the stream head intercept the "get door fd" ioctl request and 
process it entirely in that context.  This could be done by calling a 
function in dls to do the work of translating the door handle to a 
vnode_t, call fassign(), and doing all of this with appropriate locking. 
  This would require a modstub for the appropriate dls function, of course.

2. have the ioctl processing be split between dls and the stream head, 
where dls passes back an opened vnode_t as part of its ioctl 
acknowledgment, and the stream head intercepts this ack and translates 
that to a fd in curproc's table.  This seems significantly more complex, 
and I'm not sure if it's necessary.

Is my thought process entirely off here?  I think 1 could be done, and 2 
seems repulsive.

-Seb

Reply via email to