Bug#942558: hurd: should return ENXIO instead of EIEIO in open()

2019-10-18 Thread Shengjing Zhu
On Fri, Oct 18, 2019 at 2:38 PM Samuel Thibault  wrote:
>
> Hello,
>
> Shengjing Zhu, le ven. 18 oct. 2019 13:26:58 +0800, a ecrit:
> > When calling open(fifo_fd, O_WRONLY | O_NONBLOCK) on an fifo file, which has
> > no reader, it should return ENXIO. But on Hurd, it returns EIEIO.
>
> I guess you mean it does this consistently?
>

consistently on the qemu vm, with the image downloaded from cdimage.d.o.

I think it can be reproduced by following snippets,

```
#include 
#include 
#include 
#include 

int main() {
 char *s = "test";
 mkfifo(s, S_IRUSR | S_IWUSR);
 open(s, O_WRONLY | O_NONBLOCK);
 perror(NULL);
 return 0;
}
```

On linux, it prints "No such device or address";
On the hurd vm, it prints "Computer bought the farm".

-- 
Shengjing Zhu



Bug#942558: hurd: should return ENXIO instead of EIEIO in open()

2019-10-18 Thread Svante Signell
On Fri, 2019-10-18 at 23:37 +0800, Shengjing Zhu wrote:
> On Fri, Oct 18, 2019 at 2:38 PM Samuel Thibault  > wrote:
> > Hello,
> > 
> > Shengjing Zhu, le ven. 18 oct. 2019 13:26:58 +0800, a ecrit:
> > > When calling open(fifo_fd, O_WRONLY | O_NONBLOCK) on an fifo
> > > file, which has
> > > no reader, it should return ENXIO. But on Hurd, it returns EIEIO.
> > 
> > I guess you mean it does this consistently?
> > 
> 
> consistently on the qemu vm, with the image downloaded from
> cdimage.d.o.
> 
> I think it can be reproduced by following snippets,
> 
> ```
> #include 
> #include 
> #include 
> #include 
> 
> int main() {
>  char *s = "test";
>  mkfifo(s, S_IRUSR | S_IWUSR);
>  open(s, O_WRONLY | O_NONBLOCK);
>  perror(NULL);
>  return 0;
> }
> ```
> 
> On linux, it prints "No such device or address";
> On the hurd vm, it prints "Computer bought the farm".
> 
Confirmed:
./test_fifo
Computer bought the farm

And it does not seem to kill the translator:
ps -feM|grep fifo
 srs 11016   411  0:00.00 /hurd/fifo



Bug#942558: hurd: should return ENXIO instead of EIEIO in open()

2019-10-18 Thread Samuel Thibault
Svante Signell, le ven. 18 oct. 2019 19:16:01 +0200, a ecrit:
> On Fri, 2019-10-18 at 23:37 +0800, Shengjing Zhu wrote:
> > On Fri, Oct 18, 2019 at 2:38 PM Samuel Thibault  > > wrote:
> > > Hello,
> > > 
> > > Shengjing Zhu, le ven. 18 oct. 2019 13:26:58 +0800, a ecrit:
> > > > When calling open(fifo_fd, O_WRONLY | O_NONBLOCK) on an fifo
> > > > file, which has
> > > > no reader, it should return ENXIO. But on Hurd, it returns EIEIO.
> > > 
> > > I guess you mean it does this consistently?
> > > 
> > 
> > consistently on the qemu vm, with the image downloaded from
> > cdimage.d.o.
> > 
> > I think it can be reproduced by following snippets,
> > 
> > ```
> > #include 
> > #include 
> > #include 
> > #include 
> > 
> > int main() {
> >  char *s = "test";
> >  mkfifo(s, S_IRUSR | S_IWUSR);
> >  open(s, O_WRONLY | O_NONBLOCK);
> >  perror(NULL);
> >  return 0;
> > }
> > ```
> > 
> > On linux, it prints "No such device or address";
> > On the hurd vm, it prints "Computer bought the farm".
> > 
> Confirmed:
> ./test_fifo
> Computer bought the farm
> 
> And it does not seem to kill the translator:
> ps -feM|grep fifo
>  srs 11016   411  0:00.00 /hurd/fifo

It would be useful to check which underlying RPC is returning this
error, and checking why /hurd/fifo doesn't seem to behave well in that
case.

Samuel