Module Name:    src
Committed By:   riastradh
Date:           Sun Jul 28 14:39:00 UTC 2024

Modified Files:
        src/sys/net: if_wg.c

Log Message:
wg(4): Omit needless pserialize_perform on transition to DESTROYING.

A session can still be used when it is in the DESTROYING state, so
there's no need to wait for users to drain here -- that's the whole
point of a separate DESTROYING state.

It is only the transition from DESTROYING back to UNKNOWN, after the
session has been unpublished so no new users can begin, that requires
waiting for all users to drain, and we already do that in
wg_destroy_session.

Prompted by (but won't fix anything in, because this is just a
performance optimization):

PR kern/55729: net/if_wg/t_misc:wg_rekey test case fails
PR kern/56252: wg(4) state machine has race conditions
PR kern/58463: if_wg does not work when idle.


To generate a diff of this commit:
cvs rdiff -u -r1.96 -r1.97 src/sys/net/if_wg.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/if_wg.c
diff -u src/sys/net/if_wg.c:1.96 src/sys/net/if_wg.c:1.97
--- src/sys/net/if_wg.c:1.96	Sun Jul 28 14:38:42 2024
+++ src/sys/net/if_wg.c	Sun Jul 28 14:39:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wg.c,v 1.96 2024/07/28 14:38:42 riastradh Exp $	*/
+/*	$NetBSD: if_wg.c,v 1.97 2024/07/28 14:39:00 riastradh Exp $	*/
 
 /*
  * Copyright (C) Ryota Ozaki <ozaki.ry...@gmail.com>
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.96 2024/07/28 14:38:42 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wg.c,v 1.97 2024/07/28 14:39:00 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_altq_enabled.h"
@@ -2168,9 +2168,6 @@ wg_handle_msg_resp(struct wg_softc *wg, 
 	}
 
 	if (wgs_prev->wgs_state == WGS_STATE_ESTABLISHED) {
-		/* Wait for wg_get_stable_session to drain.  */
-		pserialize_perform(wgp->wgp_psz);
-
 		/*
 		 * Transition ESTABLISHED->DESTROYING.  The session
 		 * will remain usable for the data rx path to process
@@ -3255,9 +3252,6 @@ wg_task_establish_session(struct wg_soft
 	}
 
 	if (wgs_prev->wgs_state == WGS_STATE_ESTABLISHED) {
-		/* Wait for wg_get_stable_session to drain.  */
-		pserialize_perform(wgp->wgp_psz);
-
 		/*
 		 * Transition ESTABLISHED->DESTROYING.  The session
 		 * will remain usable for the data rx path to process

Reply via email to