On Sat, 2009-01-03 at 22:56 -0800, Russ Cox wrote:
> On Sat, Jan 3, 2009 at 9:04 PM, Roman V. Shaposhnik <r...@sun.com> wrote:
> > I'm confused. Is there any part of syspipe() that can NOT
> > be done from userspace? Why does it have to be a syscall?
> >
> > P.S. I would also argue that sysdup() would seem to be superfluous
> > if more feature-rich devdup was available.
> 
> I don't believe you can write a race-free implementation of
> the pipe system call using #|.

Could you, please, elaborate on what particular race do you have
in mind? Indeed, I ran into a problem with devpipe implementation,
but it isn't a race, its a dreaded implicit ->attach that namec()
does when it evaluates names with the first character being #.

> I also don't believe you can implement the dup system call
> (remember, it has two arguments) using #d.

Agreed. That's why I mentioned that a more feature-rich devdup
is needed. Of course, now I've also discovered that the current
implementation of devpipe is also not sufficient enough for me
to be able to produce a 100% user-space version of pipe(2).

> If you disagree, show me the code.

I can't :-( Sorry for the noise. With the current implementation
my question has a definite answer of why Plan9 kernel needs a syspipe().

If I'm allowed to change the implementation of devpipe, I think
I can show you the code. Would that still count?

Thanks,
Roman.


Reply via email to