Replace selwakeup() with KNOTE() in socket event activation
authorvisa <visa@openbsd.org>
Mon, 25 Jul 2022 07:28:22 +0000 (07:28 +0000)
committervisa <visa@openbsd.org>
Mon, 25 Jul 2022 07:28:22 +0000 (07:28 +0000)
Let's try this again now that the kernel locking issue in nfsrv_rcv()
has been fixed.

The previous attempt of the conversion triggered hangs on NFS servers.
This was probably caused by the removal of the kernel-locked section
just prior to the socket upcall. The section had masked a locking error
in NFS code.

sys/kern/uipc_socket.c
sys/kern/uipc_socket2.c

index aa856ab..e2eb7ea 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: uipc_socket.c,v 1.279 2022/07/01 09:56:17 mvs Exp $   */
+/*     $OpenBSD: uipc_socket.c,v 1.280 2022/07/25 07:28:22 visa Exp $  */
 /*     $NetBSD: uipc_socket.c,v 1.21 1996/02/04 02:17:52 christos Exp $        */
 
 /*
@@ -2112,7 +2112,7 @@ void
 sohasoutofband(struct socket *so)
 {
        pgsigio(&so->so_sigio, SIGURG, 0);
-       selwakeup(&so->so_rcv.sb_sel);
+       KNOTE(&so->so_rcv.sb_sel.si_note, 0);
 }
 
 int
index e3327e1..a70dccf 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: uipc_socket2.c,v 1.125 2022/07/01 09:56:17 mvs Exp $  */
+/*     $OpenBSD: uipc_socket2.c,v 1.126 2022/07/25 07:28:22 visa Exp $ */
 /*     $NetBSD: uipc_socket2.c,v 1.11 1996/02/04 02:17:55 christos Exp $       */
 
 /*
@@ -501,7 +501,7 @@ sowakeup(struct socket *so, struct sockbuf *sb)
        }
        if (sb->sb_flags & SB_ASYNC)
                pgsigio(&so->so_sigio, SIGIO, 0);
-       selwakeup(&sb->sb_sel);
+       KNOTE(&sb->sb_sel.si_note, 0);
 }
 
 /*