This diff changes the exposed API/ABI, and breaks userland -- which has obviously not experienced a test build.
This is really obvious. If you change a kernel .h file, you have to check all uses of the file. kernel .h files are installed into /usr/include/sys and all userland must. So the minimum work is to build base. Why did you skip that step? Since you commited this, the tree is now broken. Vitaliy Makkoveev <m...@openbsd.org> wrote: > This continues previous "Introduce `sb_state' and move > SS_CANTSENDMORE..." diff. > > Move socket's SS_CANTRCVMORE and SS_RCVATMARK bits to socket's `so_rcv' > buffer state bits. Moved separately of SS_CANTSENDMORE to make review > and check easier. > > As with previous diff, left remaining SS_ bits as is. > > Index: sys/kern/sys_socket.c > =================================================================== > RCS file: /cvs/src/sys/kern/sys_socket.c,v > retrieving revision 1.57 > diff -u -p -r1.57 sys_socket.c > --- sys/kern/sys_socket.c 11 Dec 2022 21:19:08 -0000 1.57 > +++ sys/kern/sys_socket.c 11 Dec 2022 23:01:34 -0000 > @@ -119,7 +119,7 @@ soo_ioctl(struct file *fp, u_long cmd, c > break; > > case SIOCATMARK: > - *(int *)data = (so->so_state&SS_RCVATMARK) != 0; > + *(int *)data = (so->so_rcv.sb_state & SBS_RCVATMARK) != 0; > break; > > default: > @@ -149,7 +149,8 @@ soo_stat(struct file *fp, struct stat *u > memset(ub, 0, sizeof (*ub)); > ub->st_mode = S_IFSOCK; > solock(so); > - if ((so->so_state & SS_CANTRCVMORE) == 0 || so->so_rcv.sb_cc != 0) > + if ((so->so_rcv.sb_state & SBS_CANTRCVMORE) == 0 || > + so->so_rcv.sb_cc != 0) > ub->st_mode |= S_IRUSR | S_IRGRP | S_IROTH; > if ((so->so_snd.sb_state & SBS_CANTSENDMORE) == 0) > ub->st_mode |= S_IWUSR | S_IWGRP | S_IWOTH; > Index: sys/kern/uipc_socket.c > =================================================================== > RCS file: /cvs/src/sys/kern/uipc_socket.c,v > retrieving revision 1.292 > diff -u -p -r1.292 uipc_socket.c > --- sys/kern/uipc_socket.c 11 Dec 2022 21:19:08 -0000 1.292 > +++ sys/kern/uipc_socket.c 11 Dec 2022 23:01:34 -0000 > @@ -867,7 +867,7 @@ restart: > so->so_error = 0; > goto release; > } > - if (so->so_state & SS_CANTRCVMORE) { > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) { > if (m) > goto dontblock; > else if (so->so_rcv.sb_cc == 0) > @@ -1023,7 +1023,7 @@ dontblock: > so, so->so_type, m, m->m_type); > #endif > } > - so->so_state &= ~SS_RCVATMARK; > + so->so_rcv.sb_state &= ~SBS_RCVATMARK; > len = uio->uio_resid; > if (so->so_oobmark && len > so->so_oobmark - offset) > len = so->so_oobmark - offset; > @@ -1100,7 +1100,7 @@ dontblock: > if ((flags & MSG_PEEK) == 0) { > so->so_oobmark -= len; > if (so->so_oobmark == 0) { > - so->so_state |= SS_RCVATMARK; > + so->so_rcv.sb_state |= SBS_RCVATMARK; > break; > } > } else { > @@ -1120,7 +1120,8 @@ dontblock: > */ > while (flags & MSG_WAITALL && m == NULL && uio->uio_resid > 0 && > !sosendallatonce(so) && !nextrecord) { > - if (so->so_error || so->so_state & SS_CANTRCVMORE) > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE || > + so->so_error) > break; > SBLASTRECORDCHK(&so->so_rcv, "soreceive sbwait 2"); > SBLASTMBUFCHK(&so->so_rcv, "soreceive sbwait 2"); > @@ -1160,7 +1161,8 @@ dontblock: > pru_rcvd(so); > } > if (orig_resid == uio->uio_resid && orig_resid && > - (flags & MSG_EOR) == 0 && (so->so_state & SS_CANTRCVMORE) == 0) { > + (flags & MSG_EOR) == 0 && > + (so->so_rcv.sb_state & SBS_CANTRCVMORE) == 0) { > sbunlock(so, &so->so_rcv); > goto restart; > } > @@ -1632,13 +1634,13 @@ somove(struct socket *so, int wait) > pru_rcvd(so); > > /* Receive buffer did shrink by len bytes, adjust oob. */ > - state = so->so_state; > - so->so_state &= ~SS_RCVATMARK; > + state = so->so_rcv.sb_state; > + so->so_rcv.sb_state &= ~SBS_RCVATMARK; > oobmark = so->so_oobmark; > so->so_oobmark = oobmark > len ? oobmark - len : 0; > if (oobmark) { > if (oobmark == len) > - so->so_state |= SS_RCVATMARK; > + so->so_rcv.sb_state |= SBS_RCVATMARK; > if (oobmark >= len) > oobmark = 0; > } > @@ -1647,13 +1649,13 @@ somove(struct socket *so, int wait) > * Handle oob data. If any malloc fails, ignore error. > * TCP urgent data is not very reliable anyway. > */ > - while (((state & SS_RCVATMARK) || oobmark) && > + while (((state & SBS_RCVATMARK) || oobmark) && > (so->so_options & SO_OOBINLINE)) { > struct mbuf *o = NULL; > > - if (state & SS_RCVATMARK) { > + if (state & SBS_RCVATMARK) { > o = m_get(wait, MT_DATA); > - state &= ~SS_RCVATMARK; > + state &= ~SBS_RCVATMARK; > } else if (oobmark) { > o = m_split(m, oobmark, wait); > if (o) { > @@ -1687,7 +1689,7 @@ somove(struct socket *so, int wait) > if (oobmark) { > oobmark -= 1; > if (oobmark == 0) > - state |= SS_RCVATMARK; > + state |= SBS_RCVATMARK; > } > m_adj(m, 1); > } > @@ -1714,7 +1716,8 @@ somove(struct socket *so, int wait) > error = EFBIG; > if (error) > so->so_error = error; > - if (((so->so_state & SS_CANTRCVMORE) && so->so_rcv.sb_cc == 0) || > + if (((so->so_rcv.sb_state & SBS_CANTRCVMORE) && > + so->so_rcv.sb_cc == 0) || > (sosp->so_snd.sb_state & SBS_CANTSENDMORE) || > maxreached || error) { > sounsplice(so, sosp, 0); > @@ -1850,7 +1853,7 @@ sosetopt(struct socket *so, int level, i > break; > > case SO_RCVBUF: > - if (so->so_state & SS_CANTRCVMORE) > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) > return (EINVAL); > if (sbcheckreserve(cnt, so->so_rcv.sb_wat) || > sbreserve(so, &so->so_rcv, cnt)) > @@ -2151,7 +2154,7 @@ filt_soread(struct knote *kn, long hint) > rv = 0; > } else > #endif /* SOCKET_SPLICE */ > - if (so->so_state & SS_CANTRCVMORE) { > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) { > kn->kn_flags |= EV_EOF; > if (kn->kn_flags & __EV_POLL) { > if (so->so_state & SS_ISDISCONNECTED) > @@ -2223,7 +2226,7 @@ filt_soexcept(struct knote *kn, long hin > } else > #endif /* SOCKET_SPLICE */ > if (kn->kn_sfflags & NOTE_OOB) { > - if (so->so_oobmark || (so->so_state & SS_RCVATMARK)) { > + if (so->so_oobmark || (so->so_rcv.sb_state & SBS_RCVATMARK)) { > kn->kn_fflags |= NOTE_OOB; > kn->kn_data -= so->so_oobmark; > rv = 1; > Index: sys/kern/uipc_socket2.c > =================================================================== > RCS file: /cvs/src/sys/kern/uipc_socket2.c,v > retrieving revision 1.130 > diff -u -p -r1.130 uipc_socket2.c > --- sys/kern/uipc_socket2.c 11 Dec 2022 21:19:08 -0000 1.130 > +++ sys/kern/uipc_socket2.c 11 Dec 2022 23:01:35 -0000 > @@ -142,7 +142,8 @@ soisdisconnecting(struct socket *so) > { > soassertlocked(so); > so->so_state &= ~SS_ISCONNECTING; > - so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE); > + so->so_state |= SS_ISDISCONNECTING; > + so->so_rcv.sb_state |= SBS_CANTRCVMORE; > so->so_snd.sb_state |= SBS_CANTSENDMORE; > wakeup(&so->so_timeo); > sowwakeup(so); > @@ -154,7 +155,8 @@ soisdisconnected(struct socket *so) > { > soassertlocked(so); > so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING); > - so->so_state |= (SS_CANTRCVMORE|SS_ISDISCONNECTED); > + so->so_state |= SS_ISDISCONNECTED; > + so->so_rcv.sb_state |= SBS_CANTRCVMORE; > so->so_snd.sb_state |= SBS_CANTSENDMORE; > wakeup(&so->so_timeo); > sowwakeup(so); > @@ -344,7 +346,7 @@ void > socantrcvmore(struct socket *so) > { > soassertlocked(so); > - so->so_state |= SS_CANTRCVMORE; > + so->so_rcv.sb_state |= SBS_CANTRCVMORE; > sorwakeup(so); > } > > Index: sys/kern/uipc_syscalls.c > =================================================================== > RCS file: /cvs/src/sys/kern/uipc_syscalls.c,v > retrieving revision 1.207 > diff -u -p -r1.207 uipc_syscalls.c > --- sys/kern/uipc_syscalls.c 7 Dec 2022 01:02:28 -0000 1.207 > +++ sys/kern/uipc_syscalls.c 11 Dec 2022 23:01:35 -0000 > @@ -288,14 +288,14 @@ doaccept(struct proc *p, int sock, struc > goto out_unlock; > } > if ((headfp->f_flag & FNONBLOCK) && head->so_qlen == 0) { > - if (head->so_state & SS_CANTRCVMORE) > + if (head->so_rcv.sb_state & SBS_CANTRCVMORE) > error = ECONNABORTED; > else > error = EWOULDBLOCK; > goto out_unlock; > } > while (head->so_qlen == 0 && head->so_error == 0) { > - if (head->so_state & SS_CANTRCVMORE) { > + if (head->so_rcv.sb_state & SBS_CANTRCVMORE) { > head->so_error = ECONNABORTED; > break; > } > Index: sys/miscfs/fifofs/fifo_vnops.c > =================================================================== > RCS file: /cvs/src/sys/miscfs/fifofs/fifo_vnops.c,v > retrieving revision 1.97 > diff -u -p -r1.97 fifo_vnops.c > --- sys/miscfs/fifofs/fifo_vnops.c 11 Dec 2022 21:19:08 -0000 1.97 > +++ sys/miscfs/fifofs/fifo_vnops.c 11 Dec 2022 23:01:35 -0000 > @@ -199,7 +199,8 @@ fifo_open(void *v) > } > if (fip->fi_writers == 1) { > solock(rso); > - rso->so_state &= ~(SS_CANTRCVMORE|SS_ISDISCONNECTED); > + rso->so_state &= ~SS_ISDISCONNECTED; > + rso->so_rcv.sb_state &= ~SBS_CANTRCVMORE; > sounlock(rso); > if (fip->fi_readers > 0) > wakeup(&fip->fi_readers); > @@ -525,7 +526,7 @@ filt_fiforead(struct knote *kn, long hin > soassertlocked(so); > > kn->kn_data = so->so_rcv.sb_cc; > - if (so->so_state & SS_CANTRCVMORE) { > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) { > kn->kn_flags |= EV_EOF; > if (kn->kn_flags & __EV_POLL) { > if (so->so_state & SS_ISDISCONNECTED) > Index: sys/net/rtsock.c > =================================================================== > RCS file: /cvs/src/sys/net/rtsock.c,v > retrieving revision 1.358 > diff -u -p -r1.358 rtsock.c > --- sys/net/rtsock.c 17 Oct 2022 14:49:02 -0000 1.358 > +++ sys/net/rtsock.c 11 Dec 2022 23:01:35 -0000 > @@ -464,7 +464,7 @@ rtm_senddesync(struct socket *so) > * timeout(9), otherwise timeout_del_barrier(9) can't help us. > */ > if ((so->so_state & SS_ISCONNECTED) == 0 || > - (so->so_state & SS_CANTRCVMORE)) > + (so->so_rcv.sb_state & SBS_CANTRCVMORE)) > return; > > /* If we are in a DESYNC state, try to send a RTM_DESYNC packet */ > @@ -524,7 +524,7 @@ route_input(struct mbuf *m0, struct sock > */ > if ((so0 == so && !(so0->so_options & SO_USELOOPBACK)) || > !(so->so_state & SS_ISCONNECTED) || > - (so->so_state & SS_CANTRCVMORE)) > + (so->so_rcv.sb_state & SBS_CANTRCVMORE)) > goto next; > > /* filter messages that the process does not want */ > Index: sys/netinet/raw_ip.c > =================================================================== > RCS file: /cvs/src/sys/netinet/raw_ip.c,v > retrieving revision 1.150 > diff -u -p -r1.150 raw_ip.c > --- sys/netinet/raw_ip.c 17 Oct 2022 14:49:02 -0000 1.150 > +++ sys/netinet/raw_ip.c 11 Dec 2022 23:01:35 -0000 > @@ -171,7 +171,7 @@ rip_input(struct mbuf **mp, int *offp, i > rw_enter_write(&rawcbtable.inpt_notify); > mtx_enter(&rawcbtable.inpt_mtx); > TAILQ_FOREACH(inp, &rawcbtable.inpt_queue, inp_queue) { > - if (inp->inp_socket->so_state & SS_CANTRCVMORE) > + if (inp->inp_socket->so_rcv.sb_state & SBS_CANTRCVMORE) > continue; > #ifdef INET6 > if (inp->inp_flags & INP_IPV6) > Index: sys/netinet/tcp_input.c > =================================================================== > RCS file: /cvs/src/sys/netinet/tcp_input.c,v > retrieving revision 1.384 > diff -u -p -r1.384 tcp_input.c > --- sys/netinet/tcp_input.c 9 Dec 2022 00:24:44 -0000 1.384 > +++ sys/netinet/tcp_input.c 11 Dec 2022 23:01:35 -0000 > @@ -340,7 +340,7 @@ tcp_flush_queue(struct tcpcb *tp) > nq = TAILQ_NEXT(q, tcpqe_q); > TAILQ_REMOVE(&tp->t_segq, q, tcpqe_q); > ND6_HINT(tp); > - if (so->so_state & SS_CANTRCVMORE) > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) > m_freem(q->tcpqe_m); > else > sbappendstream(so, &so->so_rcv, q->tcpqe_m); > @@ -1036,7 +1036,7 @@ findpcb: > * Drop TCP, IP headers and TCP options then add data > * to socket buffer. > */ > - if (so->so_state & SS_CANTRCVMORE) > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) > m_freem(m); > else { > if (tp->t_srtt != 0 && tp->rfbuf_ts != 0 && > @@ -1789,7 +1789,7 @@ trimthenstep6: > * specification, but if we don't get a FIN > * we'll hang forever. > */ > - if (so->so_state & SS_CANTRCVMORE) { > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) { > tp->t_flags |= TF_BLOCKOUTPUT; > soisdisconnected(so); > tp->t_flags &= ~TF_BLOCKOUTPUT; > @@ -1898,7 +1898,7 @@ step6: > so->so_oobmark = so->so_rcv.sb_cc + > (tp->rcv_up - tp->rcv_nxt) - 1; > if (so->so_oobmark == 0) > - so->so_state |= SS_RCVATMARK; > + so->so_rcv.sb_state |= SBS_RCVATMARK; > sohasoutofband(so); > tp->t_oobflags &= ~(TCPOOB_HAVEDATA | TCPOOB_HADDATA); > } > @@ -1941,7 +1941,7 @@ dodata: > /* XXX */ > tiflags = th->th_flags & TH_FIN; > tcpstat_pkt(tcps_rcvpack, tcps_rcvbyte, tlen); > ND6_HINT(tp); > - if (so->so_state & SS_CANTRCVMORE) > + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) > m_freem(m); > else { > m_adj(m, hdroptlen); > Index: sys/netinet/tcp_usrreq.c > =================================================================== > RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v > retrieving revision 1.213 > diff -u -p -r1.213 tcp_usrreq.c > --- sys/netinet/tcp_usrreq.c 11 Dec 2022 21:19:08 -0000 1.213 > +++ sys/netinet/tcp_usrreq.c 11 Dec 2022 23:01:35 -0000 > @@ -918,7 +918,7 @@ tcp_rcvoob(struct socket *so, struct mbu > return (error); > > if ((so->so_oobmark == 0 && > - (so->so_state & SS_RCVATMARK) == 0) || > + (so->so_rcv.sb_state & SBS_RCVATMARK) == 0) || > so->so_options & SO_OOBINLINE || > tp->t_oobflags & TCPOOB_HADDATA) { > error = EINVAL; > Index: sys/netinet/udp_usrreq.c > =================================================================== > RCS file: /cvs/src/sys/netinet/udp_usrreq.c,v > retrieving revision 1.304 > diff -u -p -r1.304 udp_usrreq.c > --- sys/netinet/udp_usrreq.c 17 Oct 2022 14:49:02 -0000 1.304 > +++ sys/netinet/udp_usrreq.c 11 Dec 2022 23:01:35 -0000 > @@ -400,7 +400,7 @@ udp_input(struct mbuf **mp, int *offp, i > rw_enter_write(&udbtable.inpt_notify); > mtx_enter(&udbtable.inpt_mtx); > TAILQ_FOREACH(inp, &udbtable.inpt_queue, inp_queue) { > - if (inp->inp_socket->so_state & SS_CANTRCVMORE) > + if (inp->inp_socket->so_rcv.sb_state & SBS_CANTRCVMORE) > continue; > #ifdef INET6 > /* don't accept it if AF does not match */ > Index: sys/netinet6/raw_ip6.c > =================================================================== > RCS file: /cvs/src/sys/netinet6/raw_ip6.c,v > retrieving revision 1.171 > diff -u -p -r1.171 raw_ip6.c > --- sys/netinet6/raw_ip6.c 17 Oct 2022 14:49:02 -0000 1.171 > +++ sys/netinet6/raw_ip6.c 11 Dec 2022 23:01:35 -0000 > @@ -183,7 +183,7 @@ rip6_input(struct mbuf **mp, int *offp, > rw_enter_write(&rawin6pcbtable.inpt_notify); > mtx_enter(&rawin6pcbtable.inpt_mtx); > TAILQ_FOREACH(in6p, &rawin6pcbtable.inpt_queue, inp_queue) { > - if (in6p->inp_socket->so_state & SS_CANTRCVMORE) > + if (in6p->inp_socket->so_rcv.sb_state & SBS_CANTRCVMORE) > continue; > if (rtable_l2(in6p->inp_rtableid) != > rtable_l2(m->m_pkthdr.ph_rtableid)) > Index: sys/sys/socketvar.h > =================================================================== > RCS file: /cvs/src/sys/sys/socketvar.h,v > retrieving revision 1.113 > diff -u -p -r1.113 socketvar.h > --- sys/sys/socketvar.h 11 Dec 2022 21:19:08 -0000 1.113 > +++ sys/sys/socketvar.h 11 Dec 2022 23:01:35 -0000 > @@ -133,7 +133,9 @@ struct socket { > #define SB_SPLICE 0x20 /* buffer is splice source or > drain */ > #define SB_NOINTR 0x40 /* operations not interruptible > */ > > -#define SBS_CANTSENDMORE 0x01 /* can't send more data to peer > */ > +#define SBS_CANTSENDMORE 0x01 /* can't send more data to peer */ > +#define SBS_CANTRCVMORE 0x02 /* can't receive more data from > peer */ > +#define SBS_RCVATMARK 0x04 /* at mark on input */ > > void (*so_upcall)(struct socket *so, caddr_t arg, int waitf); > caddr_t so_upcallarg; /* Arg for above */ > @@ -149,8 +151,6 @@ struct socket { > #define SS_ISCONNECTED 0x002 /* socket connected to a peer */ > #define SS_ISCONNECTING 0x004 /* in process of connecting to > peer */ > #define SS_ISDISCONNECTING 0x008 /* in process of disconnecting > */ > -#define SS_CANTRCVMORE 0x020 /* can't receive more data from > peer */ > -#define SS_RCVATMARK 0x040 /* at mark on input */ > #define SS_ISDISCONNECTED 0x800 /* socket disconnected from > peer */ > > #define SS_PRIV 0x080 /* privileged for broadcast, > raw... */ > @@ -227,8 +227,8 @@ soreadable(struct socket *so) > soassertlocked(so); > if (isspliced(so)) > return 0; > - return (so->so_state & SS_CANTRCVMORE) || so->so_qlen || so->so_error || > - so->so_rcv.sb_cc >= so->so_rcv.sb_lowat; > + return (so->so_rcv.sb_state & SBS_CANTRCVMORE) || so->so_qlen || > + so->so_error || so->so_rcv.sb_cc >= so->so_rcv.sb_lowat; > } > > /* can we write something to so? */ >