Author: brooks
Date: Mon Jan 21 19:22:02 2019
New Revision: 343272
URL: https://svnweb.freebsd.org/changeset/base/343272

Log:
  MFC r343162:
  
  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
  Differential Revision:        https://reviews.freebsd.org/D18885

Modified:
  stable/12/sys/netinet/siftr.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/netinet/siftr.c
==============================================================================
--- stable/12/sys/netinet/siftr.c       Mon Jan 21 19:21:11 2019        
(r343271)
+++ stable/12/sys/netinet/siftr.c       Mon Jan 21 19:22:02 2019        
(r343272)
@@ -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);
+       }
 }
 
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to