While at it, maybe we need a /dev/bullshit linked to /dev/random?? This extra node looks like bullshit to me.
It is encouraging a large application to do a round-trip through the kernel, for a rare occurance. It should simply skip doing the round-trip through kernel. What next? /dev/multiply -- you write two 32-bit values and then you can read a new 32 bit value? I see absolutely no point in wasting bytes on the root partition, or bytes in the kernel, for this stupid idea. Dave Voutila <d...@sisu.io> wrote: > > > Crystal Kolipe <kolip...@exoticsilicon.com> writes: > > > We currently don't implement the /dev/full device, which is present in > > NetBSD, FreeBSD, and Linux. > > > > For those who haven't heard of it, it's basically the same as /dev/zero, but > > writes to it always return ENOSPC. > > > > The lack of /dev/full on OpenBSD has previously caused minor issues with > > third party software, for example: > > > > https://bugs.python.org/issue21934 > > > > Is this really a problem with ports? That Python issue was related to a > Python 2.7 unit test and from 2014. > > > Adding support for /dev/full is trivial. I've attached a patch for amd64, > > if there is interest I can easily produce a set of patches for other archs. > > > > To create the device file, you'll need to do: > > > > # mknod -m 666 /dev/full c 2 5 > > > > For those who are interested, I've written a more in-depth discussion about > > memory special devices, including a proposal for another such new device, > > /dev/fill: > > > > https://research.exoticsilicon.com/articles/memory_special_devices > > > > --- arch/amd64/amd64/mem.c.dist Wed Mar 24 11:26:39 2021 > > +++ arch/amd64/amd64/mem.c Thu Mar 2 11:10:30 2023 > > @@ -88,6 +88,7 @@ > > break; > > return (EPERM); > > case 2: > > + case 5: > > case 12: > > break; > > #ifdef APERTURE > > @@ -165,9 +166,13 @@ > > uio->uio_resid = 0; > > return (0); > > > > + /* minor device 5 is /dev/full */ > > /* minor device 12 is /dev/zero */ > > + case 5: > > case 12: > > if (uio->uio_rw == UIO_WRITE) { > > + if (minor(dev)==5) > > + return (ENOSPC); > > c = iov->iov_len; > > break; > > } >