The socket flag SS_ASYNC is redundant with the socket buffer flag
SB_ASYNC.  Both are set & unset via FIOASYNC.  So the diff below gets
rid of SS_ASYNC.

Checking states on socket buffers will help reduce the scope of the
NET_LOCK() when we'll introduce a socket buffer lock.

ok?

Index: kern/sys_socket.c
===================================================================
RCS file: /cvs/src/sys/kern/sys_socket.c,v
retrieving revision 1.45
diff -u -p -r1.45 sys_socket.c
--- kern/sys_socket.c   22 Feb 2020 11:58:29 -0000      1.45
+++ kern/sys_socket.c   29 May 2021 07:53:49 -0000
@@ -96,11 +96,9 @@ soo_ioctl(struct file *fp, u_long cmd, c
        case FIOASYNC:
                s = solock(so);
                if (*(int *)data) {
-                       so->so_state |= SS_ASYNC;
                        so->so_rcv.sb_flags |= SB_ASYNC;
                        so->so_snd.sb_flags |= SB_ASYNC;
                } else {
-                       so->so_state &= ~SS_ASYNC;
                        so->so_rcv.sb_flags &= ~SB_ASYNC;
                        so->so_snd.sb_flags &= ~SB_ASYNC;
                }
Index: kern/uipc_socket2.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_socket2.c,v
retrieving revision 1.110
diff -u -p -r1.110 uipc_socket2.c
--- kern/uipc_socket2.c 26 May 2021 08:28:34 -0000      1.110
+++ kern/uipc_socket2.c 29 May 2021 07:53:41 -0000
@@ -409,7 +409,7 @@ sbunlock(struct socket *so, struct sockb
 /*
  * Wakeup processes waiting on a socket buffer.
  * Do asynchronous notification via SIGIO
- * if the socket has the SS_ASYNC flag set.
+ * if the socket buffer has the SB_ASYNC flag set.
  */
 void
 sowakeup(struct socket *so, struct sockbuf *sb)
@@ -421,7 +421,7 @@ sowakeup(struct socket *so, struct sockb
                sb->sb_flags &= ~SB_WAIT;
                wakeup(&sb->sb_cc);
        }
-       if (so->so_state & SS_ASYNC)
+       if (sb->sb_flags & SB_ASYNC)
                pgsigio(&so->so_sigio, SIGIO, 0);
        selwakeup(&sb->sb_sel);
 }
Index: sys/socketvar.h
===================================================================
RCS file: /cvs/src/sys/sys/socketvar.h,v
retrieving revision 1.97
diff -u -p -r1.97 socketvar.h
--- sys/socketvar.h     21 May 2021 10:59:02 -0000      1.97
+++ sys/socketvar.h     29 May 2021 07:54:27 -0000
@@ -147,7 +147,6 @@ struct socket {
 #define        SS_ISDISCONNECTED       0x800   /* socket disconnected from 
peer */
 
 #define        SS_PRIV                 0x080   /* privileged for broadcast, 
raw... */
-#define        SS_ASYNC                0x200   /* async i/o notify */
 #define        SS_CONNECTOUT           0x1000  /* connect, not accept, at this 
end */
 #define        SS_ISSENDING            0x2000  /* hint for lower layer */
 #define        SS_DNS                  0x4000  /* created using SOCK_DNS 
socket(2) */

Reply via email to