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? */
> 

Reply via email to