Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Jan 2019 21:46:39 +0000 (UTC)
From:      Brooks Davis <brooks@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r343162 - head/sys/netinet
Message-ID:  <201901182146.x0ILkdoJ046379@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: brooks
Date: Fri Jan 18 21:46:38 2019
New Revision: 343162
URL: https://svnweb.freebsd.org/changeset/base/343162

Log:
  Make SIFTR work again after r342125 (D18443).
  
  Correct a logic error.
  
  Only disable when already enabled or enable when disabled.
  
  Submitted by:	Richard Scheffenegger
  Reviewed by:	Cheng Cui
  Obtained from:	Cheng Cui
  MFC after:	3 days
  Differential Revision:	https://reviews.freebsd.org/D18885

Modified:
  head/sys/netinet/siftr.c

Modified: head/sys/netinet/siftr.c
==============================================================================
--- head/sys/netinet/siftr.c	Fri Jan 18 21:30:06 2019	(r343161)
+++ head/sys/netinet/siftr.c	Fri Jan 18 21:46:38 2019	(r343162)
@@ -1219,7 +1219,7 @@ siftr_manage_ops(uint8_t action)
 	if ((s = sbuf_new(NULL, NULL, 200, SBUF_AUTOEXTEND)) == NULL)
 		return (-1);
 
-	if (action == SIFTR_ENABLE) {
+	if (action == SIFTR_ENABLE && siftr_pkt_manager_thr == NULL) {
 		/*
 		 * Create our alq
 		 * XXX: We should abort if alq_open fails!
@@ -1424,7 +1424,8 @@ siftr_manage_ops(uint8_t action)
 
 		alq_close(siftr_alq);
 		siftr_alq = NULL;
-	}
+	} else
+		error = EINVAL;
 
 	sbuf_delete(s);
 
@@ -1445,13 +1446,15 @@ siftr_sysctl_enabled_handler(SYSCTL_HANDLER_ARGS)
 
 	new = siftr_enabled;
 	error = sysctl_handle_int(oidp, &new, 0, req);
-	if (error != 0 && req->newptr != NULL) {
+	if (error == 0 && req->newptr != NULL) {
 		if (new > 1)
 			return (EINVAL);
 		else if (new != siftr_enabled) {
-			error = siftr_manage_ops(new);
-			if (error != 0)
+			if ((error = siftr_manage_ops(new)) == 0) {
+				siftr_enabled = new;
+			} else {
 				siftr_manage_ops(SIFTR_DISABLE);
+			}
 		}
 	}
 
@@ -1462,7 +1465,9 @@ siftr_sysctl_enabled_handler(SYSCTL_HANDLER_ARGS)
 static void
 siftr_shutdown_handler(void *arg)
 {
-	siftr_manage_ops(SIFTR_DISABLE);
+	if (siftr_enabled == 1) {
+		siftr_manage_ops(SIFTR_DISABLE);
+	}
 }
 
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201901182146.x0ILkdoJ046379>