> Alexander Kuleshov wrote: > > pipe()/pipe2() system calls may fail now with ENOMEM error during creation > > in > > pipe_create() -> pipespace(). The bellow diff replaces ENOMEM with ENFILE > > errno which is already documented for pipe()/pipe2() to decrease amount of > > possible errno(s) with similar behaviour. > > can this error actually occur?
True with &kd_waitok it cannot occur > > Index: sys_pipe.c > > =================================================================== > > RCS file: /cvs/src/sys/kern/sys_pipe.c,v > > retrieving revision 1.76 > > diff -u -p -r1.76 sys_pipe.c > > --- sys_pipe.c 11 Feb 2017 19:51:06 -0000 1.76 > > +++ sys_pipe.c 18 Dec 2017 19:19:47 -0000 > > @@ -198,7 +198,7 @@ free1: > > * Allocate kva for pipe circular buffer, the space is pageable. > > * This routine will 'realloc' the size of a pipe safely, if it fails > > * it will retain the old buffer. > > - * If it fails it will return ENOMEM. > > + * If it fails it will return ENFILE. > > */ > > int > > pipespace(struct pipe *cpipe, u_int size) > > @@ -207,7 +207,7 @@ pipespace(struct pipe *cpipe, u_int size > > > > buffer = km_alloc(size, &kv_any, &kp_pageable, &kd_waitok); > > if (buffer == NULL) { > > - return (ENOMEM); > > + return (ENFILE); > > } > > > > /* free old resources if we are resizing */ > > >