Author: tuexen
Date: Fri May 29 11:04:55 2015
New Revision: 283698
URL: https://svnweb.freebsd.org/changeset/base/283698

Log:
  MFC r273925:
  
  Don't zero the stats before they are read out.

Modified:
  stable/10/sys/netinet/sctp_sysctl.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/netinet/sctp_sysctl.c
==============================================================================
--- stable/10/sys/netinet/sctp_sysctl.c Fri May 29 11:01:46 2015        
(r283697)
+++ stable/10/sys/netinet/sctp_sysctl.c Fri May 29 11:04:55 2015        
(r283698)
@@ -636,26 +636,27 @@ sctp_sysctl_handle_stats(SYSCTL_HANDLER_
        int error;
 
 #if defined(SMP) && defined(SCTP_USE_PERCPU_STAT)
-       struct sctpstat sb_temp;
        struct sctpstat *sarry;
        struct sctpstat sb;
        int cpu;
+
 #endif
+       struct sctpstat sb_temp;
 
        if ((req->newptr != NULL) &&
            (req->newlen != sizeof(struct sctpstat))) {
                return (EINVAL);
        }
-
-#if defined(SMP) && defined(SCTP_USE_PERCPU_STAT)
-       memset(&sb, 0, sizeof(sb));
-       memset(&sb_temp, 0, sizeof(sb_temp));
+       memset(&sb_temp, 0, sizeof(struct sctpstat));
 
        if (req->newptr != NULL) {
-               error = SYSCTL_IN(req, &sb_temp, sizeof(sb_temp));
-               if (error != 0)
+               error = SYSCTL_IN(req, &sb_temp, sizeof(struct sctpstat));
+               if (error != 0) {
                        return (error);
+               }
        }
+#if defined(SMP) && defined(SCTP_USE_PERCPU_STAT)
+       memset(&sb, 0, sizeof(sb));
        for (cpu = 0; cpu < mp_maxid; cpu++) {
                sarry = &SCTP_BASE_STATS[cpu];
                if (sarry->sctps_discontinuitytime.tv_sec > 
sb.sctps_discontinuitytime.tv_sec) {
@@ -783,15 +784,19 @@ sctp_sysctl_handle_stats(SYSCTL_HANDLER_
                sb.sctps_send_burst_avoid += sarry->sctps_send_burst_avoid;
                sb.sctps_send_cwnd_avoid += sarry->sctps_send_cwnd_avoid;
                sb.sctps_fwdtsn_map_over += sarry->sctps_fwdtsn_map_over;
-               if (req->newptr != NULL)
+               if (req->newptr != NULL) {
                        memcpy(sarry, &sb_temp, sizeof(struct sctpstat));
+               }
        }
        error = SYSCTL_OUT(req, &sb, sizeof(struct sctpstat));
 #else
-       error = SYSCTL_IN(req, &SCTP_BASE_STATS, sizeof(struct sctpstat));
-       if (error)
-               return (error);
        error = SYSCTL_OUT(req, &SCTP_BASE_STATS, sizeof(struct sctpstat));
+       if (error != 0) {
+               return (error);
+       }
+       if (req->newptr != NULL) {
+               memcpy(&SCTP_BASE_STATS, &sb_temp, sizeof(struct sctpstat));
+       }
 #endif
        return (error);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to