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