Home | History | Annotate | Download | only in fifofs
History log of /src/sys/miscfs/fifofs/fifo_vnops.c
RevisionDateAuthorComments
 1.91  11-Oct-2021  thorpej Setting EV_EOF requires modifying kn->kn_flags. However, that relies on
holding the kq_lock of that note's kq. Rather than exposing this directly,
add new knote_set_eof() and knote_clear_eof() functions that handle the
necessary locking and don't leak as many implementation details to modules.

NetBSD 9.99.91
 1.90  02-Oct-2021  thorpej - Add a new EVFILT_WRITE test case for FIFOs that correctly validates
the writability thresholds.
- Fix a bug in fifo_kqfilter() exposed by the new test case; in the
EVFILT_WRITE case, we were attaching the wrong end of the socket
pair to the knote!
- In filt_fiforead(), use ">= so->so_rcv.sb_lowat" rather than "> 0"
for consistency with fifo_poll(). NFC.
 1.89  02-Oct-2021  thorpej ...and correct my terrible spelling.
 1.88  02-Oct-2021  thorpej - Strenghen the poll(2) fifo_inout test to ensure that once the reader
has read enough that exactly PIPE_BUF space is available that the FIFO
becomes writable again.
- When creating a FIFO, ensure that the receive low water mark is 1
(a FIFO must be readable when at least 1 byte is available); this
was already the case implicitly, but this makes it explicit.
- Similarly, set the send low water mark to PIPE_BUF to ensure that
the pipe is writable when at least PIPE_BUF bytes of space are available
in the send buffer. Without this change, the strengthened test case
above does not pass (the default send low water mark is larger than
PIPE_BUF; see soreserve()).
- Make the same low water mark changes to the PIPE_SOCKETPAIR case.
 1.87  02-Oct-2021  thorpej - fifo_poll(): If the last writer has disappeared, detect this and return
POLLHUP, per POSIX.
- fifo_close(): Use the new fifo_socantrcvmore(), which is like the
garden-variety socantrcvmore(), except it specifies POLL_HUP rather
than POLL_IN (so the correct code for SIGIO is sent).
- sowakeup(): Allow POLL_HUP as a code (notifies poll'ers with POLLHUP).
- Add test cases for correct POLLHUP behavior with FIFOs.

Fixes PR kern/56429.
 1.86  29-Sep-2021  thorpej The kq filterops that interact with sockets are MPSAFE.
 1.85  29-Sep-2021  thorpej - Change selremove_knote() from returning void to bool, and return
true if the last knote was removed and there are no more knotes
on the selinfo.
- Use this new return value in filt_sordetach(), filt_sowdetach(),
filt_fifordetach(), and filt_fifowdetach() to know when to clear
SB_KOTE without having to know select/kqueue implementation details.
 1.84  26-Sep-2021  thorpej Change the kqueue filterops::f_isfd field to filterops::f_flags, and
define a flag FILTEROP_ISFD that has the meaning of the prior f_isfd.
Field and flag name aligned with OpenBSD.

This does not constitute a functional or ABI change, as the field location
and size, and the value placed in that field, are the same as the previous
code, but we're bumping __NetBSD_Version__ so 3rd-party module source code
can adapt, as needed.

NetBSD 9.99.89
 1.83  29-Jun-2021  dholland - Add a new vnode op: VOP_PARSEPATH.
- Move namei_getcomponent to genfs_vnops.c and call it genfs_parsepath.
- Add a parsepath entry to every vnode ops table.

VOP_PARSEPATH takes a directory vnode to be searched and a complete
following path and chooses how much of that path to consume. To begin
with, all parsepath calls are genfs_parsepath, which locates the first
'/' as always.

Note that the call doesn't take the whole struct componentname, only
the string. The other bits of struct componentname should not be
needed and there's no reason to cause potential complications by
exposing them.
 1.82  19-Dec-2020  thorpej branches: 1.82.4;
Use sel{record,remove}_knote().
 1.81  27-Jun-2020  christos branches: 1.81.2;
Introduce genfs_pathconf() and use it for the default case in all filesystems.
 1.80  16-May-2020  christos Add ACL support for FFS. From FreeBSD.
 1.79  25-Oct-2017  maya branches: 1.79.8;
Use C99 initializer for filterops

Mostly done with spatch with touchups for indentation

@@
expression a;
identifier b,c,d;
identifier p;
@@
const struct filterops p =
- { a, b, c, d
+ {
+ .f_isfd = a,
+ .f_attach = b,
+ .f_detach = c,
+ .f_event = d,
};
 1.78  11-Apr-2017  riastradh Make VOP_INACTIVE preserve vnode lock on return.

Discussed on tech-kern:
https://mail-index.netbsd.org/tech-kern/2017/04/01/msg021751.html

Ride 7.99.68, a bumpy bus of incremental vfs improvements!
 1.77  09-Aug-2014  rtr branches: 1.77.4; 1.77.8; 1.77.12;
split PRU_CONNECT2 & PRU_PURGEIF function out of pr_generic() usrreq
switches and put into separate functions

- always KASSERT(solocked(so)) even if not implemented
(for PRU_CONNECT2 only)

- replace calls to pr_generic() with req = PRU_CONNECT2 with calls to
pr_connect2()

- replace calls to pr_generic() with req = PRU_PURGEIF with calls to
pr_purgeif()

put common code from unp_connect2() (used by unp_connect() into
unp_connect1() and call out to it when needed

patch only briefly reviewed by rmind@
 1.76  25-Jul-2014  dholland Add VOP_FALLOCATE and VOP_FDISCARD to every vnode ops table I can
find.

The filesystem ones all call genfs_eopnotsupp - right now I am only
implementing the plumbing and we can implement fallocate and/or
fdiscard for files later.

The device ones call spec_fallocate (which is also genfs_eopnotsupp)
and spec_fdiscard, which dispatches to the device-level op.

The fifo ones all call vn_fifo_bypass, which also ends up being
EOPNOTSUPP.
 1.75  17-May-2014  rmind fifo_open: assign v_fifoinfo once initialised; add an assert while here.
 1.74  07-Feb-2014  hannken branches: 1.74.2;
Change vnode operation lookup to return the resulting vnode *vpp unlocked.
Change cache_lookup() to return an unlocked vnode.

Discussed on tech-kern@

Welcome to 6.99.31
 1.73  08-Apr-2013  skrll branches: 1.73.4;
Remove some set but unused variables
 1.72  21-Dec-2011  christos branches: 1.72.6;
only set CANTRCVMORE if no error.
 1.71  20-Dec-2011  christos - Eliminate so_nbio and turn it into a bit SS_NBIO in so_state.
- Introduce MSG_NBIO so that we can turn non blocking i/o on a per call basis
- Use MSG_NBIO to fix the XXX: multi-threaded issues on the fifo sockets.
- Don't set SO_CANTRCVMORE, if we were interrupted (perhaps do it for all
errors?).
 1.70  31-Aug-2011  plunky branches: 1.70.2; 1.70.6;
NULL does not need a cast
 1.69  24-Jun-2010  hannken Clean up vnode lock operations pass 2:

VOP_UNLOCK(vp, flags) -> VOP_UNLOCK(vp): Remove the unneeded flags argument.

Welcome to 5.99.32.

Discussed on tech-kern.
 1.68  29-Mar-2010  pooka Stop exposing fifofs internals and leave only fifo_vnodeop_p visible.
 1.67  27-Mar-2010  pooka Access fifoinfo only when it's non-NULL.
 1.66  28-Apr-2008  martin branches: 1.66.20; 1.66.22;
Remove clause 3 and 4 from TNF licenses
 1.65  24-Apr-2008  ad branches: 1.65.2;
Fix locking in the fifo kqueue routines.
 1.64  24-Apr-2008  ad Merge the socket locking patch:

- Socket layer becomes MP safe.
- Unix protocols become MP safe.
- Allows protocol processing interrupts to safely block on locks.
- Fixes a number of race conditions.

With much feedback from matt@ and plunky@.
 1.63  21-Mar-2008  ad branches: 1.63.2;
Catch up with descriptor handling changes. See kern_descrip.c revision
1.173 for details.
 1.62  11-Feb-2008  yamt branches: 1.62.6;
sprinkle KERNEL_LOCK for socket.
a little different version was tested by Matthias Drochner.
 1.61  06-Feb-2008  ad Don't lock the socket to set/clear FNONBLOCK. Just set it atomically.
 1.60  25-Jan-2008  ad Remove VOP_LEASE. Discussed on tech-kern.
 1.59  05-Dec-2007  pooka Do not "return 1" from kqfilter for errors. That value is passed
directly to the userland caller and results in a mysterious EPERM.
Instead, return EINVAL or something else sensible depending on the
case.
 1.58  26-Nov-2007  pooka branches: 1.58.2;
Remove the "struct lwp *" argument from all VFS and VOP interfaces.
The general trend is to remove it from all kernel interfaces and
this is a start. In case the calling lwp is desired, curlwp should
be used.

quick consensus on tech-kern
 1.57  16-Nov-2006  christos branches: 1.57.22; 1.57.24; 1.57.30;
__unused removal on arguments; approved by core.
 1.56  12-Oct-2006  christos - sprinkle __unused on function decls.
- fix a couple of unused bugs
- no more -Wno-unused for i386
 1.55  14-May-2006  elad branches: 1.55.8; 1.55.10;
integrate kauth.
 1.54  11-Dec-2005  christos branches: 1.54.4; 1.54.6; 1.54.8; 1.54.10; 1.54.12;
merge ktrace-lwp.
 1.53  02-Nov-2005  yamt merge yamt-vop branch. remove following VOPs.

VOP_BLKATOFF
VOP_VALLOC
VOP_BALLOC
VOP_REALLOCBLKS
VOP_VFREE
VOP_TRUNCATE
VOP_UPDATE
 1.52  30-Aug-2005  xtraeme branches: 1.52.2;
Remove __P()
 1.51  26-Feb-2005  perry branches: 1.51.4;
nuke trailing whitespace
 1.50  17-Jul-2004  mycroft branches: 1.50.4; 1.50.6;
Clean up reader/writer counts for the revoke case in fifo_close().
 1.49  22-May-2004  jonathan Eliminate several uses of `curproc' from the socket-layer code and from NFS.

Add a new explicit `struct proc *p' argument to socreate(), sosend().
Use that argument instead of curproc. Follow-on changes to pass that
argument to socreate(), sosend(), and (*so->so_send)() calls.
These changes reviewed and independently recoded by Matt Thomas.

Changes to soreceive() and (*dom->dom_exernalize() from Matt Thomas:
pass soreceive()'s struct uio* uio->uio_procp to unp_externalize().
Eliminate curproc from unp_externalize. Also, now soreceive() uses
its uio->uio_procp value, pass that same value downward to
((pr->pru_usrreq)() calls for consistency, instead of (struct proc * )0.

Similar changes in sys/nfs to eliminate (most) uses of curproc,
either via the req-> r_procp field of a struct nfsreq *req argument,
or by passing down new explicit struct proc * arguments.

Reviewed by: Matt Thomas, posted to tech-kern.
NB: The (*pr->pru_usrreq)() change should be tested on more (all!) protocols.
 1.48  12-May-2004  jrf caddr_t -> void * and removal of some more casts.
 1.47  29-Apr-2004  jrf Removed remaining caddr_t casts we do not need in miscfs. Recompiled
kernel and ran for a day or so. There are still some caddr_t types in
the arguments of some calls, I will do those separately (later) as
they touch a lot more of the system.
Approved by christos@NetBSD.org.
 1.46  06-Mar-2004  wrstuden Handle the case of fifo_close() getting called from vclean(). In that
case, we tear down the node-specific storage as if there were no more open
users. As vclean() will VT_NON the vnode before anyone else will get access
to the vnode, this is our last chance.

Fixes memory leak in revoke(2) path noticed by tedu at openbsd dot org.
 1.45  29-Nov-2003  matt Restore a change that made AF_LOCAL sockets block on connect(2) until
accepted. However, this time this behavor is not the default. Instead
it must enabled by using the LOCAL_CONNWAIT socket option on either the
connecting or accepting socket.
 1.44  29-Nov-2003  perry Revert a change that altered the semantics of AF_LOCAL sockets. Sadly
this made us API incompatible with other Unixes.
 1.43  03-Sep-2003  matt Change the behavor of AF_LOCAL connect() to sleep until the server has
accepted the connection. This can prevent a client from overwhelming a
server.
 1.42  07-Aug-2003  agc Move UCB-licensed code from 4-clause to 3-clause licence.

Patches provided by Joel Baker in PR 22364, verified by myself.
 1.41  29-Jun-2003  fvdl branches: 1.41.2;
Back out the lwp/ktrace changes. They contained a lot of colateral damage,
and need to be examined and discussed more.
 1.40  28-Jun-2003  darrenr Pass lwp pointers throughtout the kernel, as required, so that the lwpid can
be inserted into ktrace records. The general change has been to replace
"struct proc *" with "struct lwp *" in various function prototypes, pass
the lwp through and use l_proc to get the process pointer when needed.

Bump the kernel rev up to 1.6V
 1.39  17-Mar-2003  martin Fix a race condition where a writer could already have closed the fifo
before the reader woke up - this made the reader loop again, waiting
for another writer, even though there was input available.

Thanks to Jaromir for spotting the real cause and sugesting a solution.

This should fix PR port-sparc64/20283.
 1.38  02-Mar-2003  jdolecek use different wmesg for the reader and the writer
 1.37  26-Nov-2002  christos si_ -> sel_
 1.36  23-Oct-2002  jdolecek merge kqueue branch into -current

kqueue provides a stateful and efficient event notification framework
currently supported events include socket, file, directory, fifo,
pipe, tty and device changes, and monitoring of processes and signals

kqueue is supported by all writable filesystems in NetBSD tree
(with exception of Coda) and all device drivers supporting poll(2)

based on work done by Jonathan Lemon for FreeBSD
initial NetBSD port done by Luke Mewburn and Jason Thorpe
 1.35  26-Aug-2002  thorpej Fix a signed/unsigned comparison warning from GCC 3.3.
 1.34  27-Jul-2002  chs we can't use the vnode's v_usecount to track how many times the vnode
has been VOP_OPEN()'d. if the fifo is being accessed via a layered fs,
v_usecount is always one (representing the hold by the layered vnode)
regardless of how many times the vnode has been opened. instead, keep a
separate counter for opens. fixes PR 17195 and probably 17724.
 1.33  06-Dec-2001  chs branches: 1.33.8; 1.33.10;
add a VOP_PUTPAGES method for all the filesystems that don't have pages,
just unlock the interlock.
 1.32  10-Nov-2001  lukem add RCSIDs
 1.31  22-Sep-2001  sommerfeld branches: 1.31.2;
Add fifo_putpages() placebo so that the vnode's uobj is unlocked.
 1.30  27-Feb-2001  lukem branches: 1.30.2; 1.30.4; 1.30.6;
convert to ansi knf
 1.29  22-Jan-2001  jdolecek make filesystem vnodeop, specop, fifoop and vnodeopv_* arrays const
 1.28  30-Mar-2000  augustss branches: 1.28.4;
Register, begone!
 1.27  31-Oct-1998  matt branches: 1.27.12;
Use the so_send and so_receive funcptrs in the socket instead of calling
sosend/soreceive directly. [I've been meaning to commit these for months.]
 1.26  03-Aug-1998  kleink Recognize _PC_SYNC_IO.
 1.25  01-Mar-1998  fvdl Merge with Lite2 + local changes
 1.24  09-Oct-1997  mycroft Make openstr[] const.
 1.23  18-May-1997  kleink branches: 1.23.4;
When reading from an empty FIFO no process has opened for writing, and
O_NONBLOCK is set, return 0.
 1.22  13-Oct-1996  christos backout previous kprintf changes
 1.21  10-Oct-1996  christos printf -> kprintf, sprintf -> ksprintf
 1.20  07-Sep-1996  mycroft Implement poll(2).
 1.19  01-Sep-1996  mycroft Add a set of generic file system operations that most file systems use.
Also, fix some time stamp bogosities.
 1.18  16-Mar-1996  christos Fix printf format follies.
 1.17  09-Feb-1996  christos miscfs prototype changes
 1.16  14-Apr-1995  mycroft Allow opening a FIFO with O_RDWR.
 1.15  02-Apr-1995  mycroft Emulate SCO behaviour when both FREAD and FWRITE are set, but only for SCO
executables.
 1.14  14-Dec-1994  mycroft Remove a_fp.
 1.13  13-Dec-1994  mycroft Turn lease_check() into a vnode op, per CSRG.
 1.12  14-Nov-1994  christos fixed struct comment
 1.11  29-Oct-1994  cgd light clean; make sure headers are properly included, types are OK, etc.
 1.10  20-Oct-1994  cgd update for new syscall args description mechanism
 1.9  29-Jun-1994  cgd New RCS ID's, take two. they're more aesthecially pleasant, and use 'NetBSD'
 1.8  08-Jun-1994  mycroft Update to 4.4-Lite fs code, with local changes.
 1.7  05-Jan-1994  cgd fix return type for fifo_print
 1.6  18-Dec-1993  mycroft Canonicalize all #includes.
 1.5  27-Jun-1993  andrew branches: 1.5.4;
ANSIfications - removed all implicit function return types and argument
definitions. Ensured that all files include "systm.h" to gain access to
general prototypes. Casts where necessary.
 1.4  27-May-1993  cgd make the sleeps on socket open interruptable.
 1.3  20-May-1993  cgd add $Id$ strings, and clean up file headers where necessary
 1.2  02-Apr-1993  cgd Jay Fenlason <hack@datacube.com>:

1: the fi_readers and fi_writers fields of the fifoinfo structure were not
being initialized to 0. This caused the driver to not sleep the first
process to open the fifo--it thought there was already another process to
talk to (most of the time.)

2: fifo_open() was calling tsleep() without unlocking the inode of the fifo
file. This caused *any* subsequent access to the file (even an ls (!)) to
hang forever. Note that this bug was usually masked by bug #1 above.
 1.1  21-Mar-1993  cgd branches: 1.1.1;
Initial revision
 1.1.1.3  01-Mar-1998  fvdl Import 4.4BSD-Lite2
 1.1.1.2  01-Mar-1998  fvdl Import 4.4BSD-Lite for reference
 1.1.1.1  21-Mar-1993  cgd initial import of 386bsd-0.1 sources
 1.5.4.2  14-Nov-1993  mycroft Canonicalize all #includes.
 1.5.4.1  10-Nov-1993  mycroft AF_UNIX --> AF_LOCAL
 1.23.4.1  14-Oct-1997  thorpej Update marc-pcmcia branch from trunk.
 1.27.12.3  12-Mar-2001  bouyer Sync with HEAD.
 1.27.12.2  11-Feb-2001  bouyer Sync with HEAD.
 1.27.12.1  20-Nov-2000  bouyer Update thorpej_scsipi to -current as of a month ago
 1.28.4.1  08-Apr-2004  jmc Pullup patch (requested by wrstuden in ticket #125)

Handle the case of fifo_close() getting called from vclean(). In that
case, we tear down the node-specific storage as if there were no more open
users. As vclean() will VT_NON the vnode before anyone else will get access
o the vnode, this is our last chance.

Fixes memory leak in revoke(2) path.
 1.30.6.2  01-Oct-2001  fvdl Catch up with -current.
 1.30.6.1  18-Sep-2001  fvdl Various changes to make cloning devices possible:

* Add an extra argument (struct vnode **) to VOP_OPEN. If it is
not NULL, specfs will create a cloned (aliased) vnode during
the call, and return it there. The caller should release and
unlock the original vnode if a new vnode was returned. The
new vnode is returned locked.

* Add a flag field to the cdevsw and bdevsw structures.
DF_CLONING indicates that it wants a new vnode for each
open (XXX is there a better way? devprop?)

* If a device is cloning, always call the close entry
point for a VOP_CLOSE.


Also, rewrite cons.c to do the right thing with vnodes. Use VOPs
rather then direct device entry calls. Suggested by mycroft@

Light to moderate testing done an i386 system (arch doesn't matter
though, these are MI changes).
 1.30.4.7  29-Sep-2002  jdolecek don't need cast to (caddr_t) for kn_hook anymore
 1.30.4.6  24-Sep-2002  jdolecek shuffle filt_*() to not need forward decls, put all kq related function
and structures together
 1.30.4.5  22-Sep-2002  jdolecek need to set kn_hook in fifo_kqfilter() (looks like merge botch,
this thing is correct in FreeBSD version)
 1.30.4.4  06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.30.4.3  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.30.4.2  07-Sep-2001  thorpej More const.
 1.30.4.1  10-Jul-2001  lukem add fifo_kqfilter() and filt_fifo*()
 1.30.2.7  11-Dec-2002  thorpej Sync with HEAD.
 1.30.2.6  11-Nov-2002  nathanw Catch up to -current
 1.30.2.5  27-Aug-2002  nathanw Catch up to -current.
 1.30.2.4  01-Aug-2002  nathanw Catch up to -current.
 1.30.2.3  08-Jan-2002  nathanw Catch up to -current.
 1.30.2.2  14-Nov-2001  nathanw Catch up to -current.
 1.30.2.1  26-Sep-2001  nathanw Catch up to -current.
Again.
 1.31.2.1  12-Nov-2001  thorpej Sync the thorpej-mips-cache branch with -current.
 1.33.10.2  15-Mar-2004  jmc Pullup rev 1.46 (requested by wrstuden in ticket #1621)

Handle the case of fifo_close() getting called from vclean().
Fixes memory leak in revoke(2) path.
 1.33.10.1  29-Jul-2002  lukem Pull up revision 1.34 (requested by chuq in ticket #566):
we can't use the vnode's v_usecount to track how many times the vnode
has been VOP_OPEN()'d. if the fifo is being accessed via a layered fs,
v_usecount is always one (representing the hold by the layered vnode)
regardless of how many times the vnode has been opened. instead, keep a
separate counter for opens. fixes PR 17195 and probably 17724.
 1.33.8.1  29-Aug-2002  gehenna catch up with -current.
 1.41.2.6  10-Nov-2005  skrll Sync with HEAD. Here we go again...
 1.41.2.5  04-Mar-2005  skrll Sync with HEAD.

Hi Perry!
 1.41.2.4  21-Sep-2004  skrll Fix the sync with head I botched.
 1.41.2.3  18-Sep-2004  skrll Sync with HEAD.
 1.41.2.2  03-Aug-2004  skrll Sync with HEAD
 1.41.2.1  02-Jul-2003  darrenr Apply the aborted ktrace-lwp changes to a specific branch. This is just for
others to review, I'm concerned that patch fuziness may have resulted in some
errant code being generated but I'll look at that later by comparing the diff
from the base to the branch with the file I attempt to apply to it. This will,
at the very least, put the changes in a better context for others to review
them and attempt to tinker with removing passing of 'struct lwp' through
the kernel.
 1.50.6.1  19-Mar-2005  yamt sync with head. xen and whitespace. xen part is not finished.
 1.50.4.1  29-Apr-2005  kent sync with -current
 1.51.4.6  24-Mar-2008  yamt sync with head.
 1.51.4.5  27-Feb-2008  yamt sync with head.
 1.51.4.4  11-Feb-2008  yamt sync with head.
 1.51.4.3  04-Feb-2008  yamt sync with head.
 1.51.4.2  07-Dec-2007  yamt sync with head
 1.51.4.1  21-Jun-2006  yamt sync with head.
 1.52.2.1  20-Oct-2005  yamt adapt specfs and fifofs.
 1.54.12.1  24-May-2006  tron Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
 1.54.10.1  08-Mar-2006  elad Adapt to kernel authorization KPI.
 1.54.8.1  24-May-2006  yamt sync with head.
 1.54.6.1  01-Jun-2006  kardel Sync with head.
 1.54.4.1  09-Sep-2006  rpaulo sync with head
 1.55.10.2  10-Dec-2006  yamt sync with head.
 1.55.10.1  22-Oct-2006  yamt sync with head
 1.55.8.1  18-Nov-2006  ad Sync with head.
 1.57.30.2  18-Feb-2008  mjf Sync with HEAD.
 1.57.30.1  08-Dec-2007  mjf Sync with HEAD.
 1.57.24.2  23-Mar-2008  matt sync with HEAD
 1.57.24.1  09-Jan-2008  matt sync with HEAD
 1.57.22.2  09-Dec-2007  jmcneill Sync with HEAD.
 1.57.22.1  27-Nov-2007  joerg Sync with HEAD. amd64 Xen support needs testing.
 1.58.2.1  08-Dec-2007  ad Sync with head.
 1.62.6.2  02-Jun-2008  mjf Sync with HEAD.
 1.62.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.63.2.1  18-May-2008  yamt sync with head.
 1.65.2.2  11-Aug-2010  yamt sync with head.
 1.65.2.1  16-May-2008  yamt sync with head.
 1.66.22.2  03-Jul-2010  rmind sync with head
 1.66.22.1  30-May-2010  rmind sync with head
 1.66.20.2  17-Aug-2010  uebayasi Sync with HEAD.
 1.66.20.1  30-Apr-2010  uebayasi Sync with HEAD.
 1.70.6.1  18-Feb-2012  mrg merge to -current.
 1.70.2.2  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.70.2.1  17-Apr-2012  yamt sync with head
 1.72.6.3  03-Dec-2017  jdolecek update from HEAD
 1.72.6.2  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.72.6.1  23-Jun-2013  tls resync from head
 1.73.4.2  18-May-2014  rmind sync with head
 1.73.4.1  28-Aug-2013  rmind Checkpoint work in progress:
- Initial split of the protocol user-request method into the following
methods: pr_attach, pr_detach and pr_generic for old the pr_usrreq.
- Adjust socreate(9) and sonewconn(9) to call pr_attach without the
socket lock held (as a preparation for the locking scheme adjustment).
- Adjust all pr_attach routines to assert that PCB is not set.
- Sprinkle various comments, document some routines and their locking.
- Remove M_PCB, replace with kmem(9).
- Fix few bugs spotted on the way.
 1.74.2.1  10-Aug-2014  tls Rebase.
 1.77.12.1  21-Apr-2017  bouyer Sync with HEAD
 1.77.8.1  26-Apr-2017  pgoyette Sync with HEAD
 1.77.4.1  28-Aug-2017  skrll Sync with HEAD
 1.79.8.3  04-Oct-2021  martin Pull up following revision(s) (requested by thorpej in ticket #1353):

sys/miscfs/fifofs/fifo_vnops.c: revision 1.90
tests/kernel/kqueue/write/t_fifo.c: revision 1.5

- Add a new EVFILT_WRITE test case for FIFOs that correctly validates
the writability thresholds.
- Fix a bug in fifo_kqfilter() exposed by the new test case; in the
EVFILT_WRITE case, we were attaching the wrong end of the socket
pair to the knote!
- In filt_fiforead(), use ">= so->so_rcv.sb_lowat" rather than "> 0"
for consistency with fifo_poll(). NFC.
 1.79.8.2  04-Oct-2021  martin Pull up following revision(s) (requested by thorpej in ticket #1351):

sys/miscfs/fifofs/fifo_vnops.c: revision 1.88
sys/kern/uipc_syscalls.c: revision 1.201
tests/lib/libc/sys/t_poll.c: revision 1.6
tests/lib/libc/sys/t_poll.c: revision 1.7
tests/lib/libc/sys/t_poll.c: revision 1.8

- Strenghen the poll(2) fifo_inout test to ensure that once the reader
has read enough that exactly PIPE_BUF space is available that the FIFO
becomes writable again.
- When creating a FIFO, ensure that the receive low water mark is 1
(a FIFO must be readable when at least 1 byte is available); this
was already the case implicitly, but this makes it explicit.
- Similarly, set the send low water mark to PIPE_BUF to ensure that
the pipe is writable when at least PIPE_BUF bytes of space are available
in the send buffer. Without this change, the strengthened test case
above does not pass (the default send low water mark is larger than
PIPE_BUF; see soreserve()).
- Make the same low water mark changes to the PIPE_SOCKETPAIR case.

In the fifo_hup1 test, also ensure that POLLHUP is de-asserted when a
new writer appears.

Add a fifo_inout test case that validates the expected POLLIN / POLLOUT
behavior for FIFOs:
- A FIFO is readable so long as at least 1 byte is available.
- A FIFO is writable so long as at least PIPE_BUF (obtained with _PC_PIPE_BUF)
space is avaiable.
This will be cloned for a forthcoming kevent test case.
 1.79.8.1  02-Oct-2021  martin Pull up following revision(s) (requested by thorpej in ticket #1350):

sys/kern/uipc_socket2.c: revision 1.140
tests/lib/libc/sys/t_poll.c: revision 1.5
sys/miscfs/fifofs/fifo_vnops.c: revision 1.87

- fifo_poll(): If the last writer has disappeared, detect this and return
POLLHUP, per POSIX.
- fifo_close(): Use the new fifo_socantrcvmore(), which is like the
garden-variety socantrcvmore(), except it specifies POLL_HUP rather
than POLL_IN (so the correct code for SIGIO is sent).
- sowakeup(): Allow POLL_HUP as a code (notifies poll'ers with POLLHUP).
- Add test cases for correct POLLHUP behavior with FIFOs.

Fixes PR kern/56429.
 1.81.2.1  03-Jan-2021  thorpej Sync w/ HEAD.
 1.82.4.1  01-Aug-2021  thorpej Sync with HEAD.

RSS XML Feed