Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 May 2015 11:04:56 +0000 (UTC)
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r283698 - stable/10/sys/netinet
Message-ID:  <201505291104.t4TB4uCD080242@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }



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