kern/92412: [libexec] [patch] rpc.rstatd reports bogus packets/per/second info

G. Paul Ziemba p-fbsd-bugs at ziemba.us
Sun Apr 14 09:00:01 UTC 2013


The following reply was made to PR kern/92412; it has been noted by GNATS.

From: "G. Paul Ziemba" <p-fbsd-bugs at ziemba.us>
To: bug-followup at FreeBSD.org, hostmaster at whois.gts.net
Cc:  
Subject: Re: kern/92412: [libexec] [patch] rpc.rstatd reports bogus
 packets/per/second info
Date: Sun, 14 Apr 2013 01:30:06 -0700

 --vkogqOf2sHV7VnPd
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 Attached is an updated patch for 64-bit systems. I hope someone
 can apply it to HEAD - fix has been waiting for some years. Please?
 
 -- 
 G. Paul Ziemba
 FreeBSD unix:
  1:21AM  up  1:41, 1 user, load averages: 0.76, 0.89, 0.90
 
 --vkogqOf2sHV7VnPd
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename="patch-usr-src-libexec-rpc.rstatd"
 
 --- rstat_proc.c.orig	2009-08-03 01:13:06.000000000 -0700
 +++ rstat_proc.c	2012-10-03 11:18:03.000000000 -0700
 @@ -125,6 +125,7 @@
      if (! stat_is_init)
          stat_init();
      sincelastreq = 0;
 +    stats_all.s2.if_opackets = stats_all.s3.if_opackets;
      return(&stats_all.s2);
  }
  
 @@ -134,6 +135,7 @@
      if (! stat_is_init)
          stat_init();
      sincelastreq = 0;
 +    stats_all.s1.if_opackets = stats_all.s3.if_opackets;
      return(&stats_all.s1);
  }
  
 @@ -168,6 +170,7 @@
  	struct clockinfo clockrate;
  	struct vmmeter cnt;
  	struct ifmibdata ifmd;
 +	struct timeval newcurtime;	/* XXX 64-bit */
  	double avrun[3];
  	struct timeval tm, btm;
  	int mib[6];
 @@ -205,13 +208,13 @@
  		exit(1);
  	}
  	for(i = 0; i < RSTAT_CPUSTATES ; i++)
 -		stats_all.s1.cp_time[i] = bsd_cp_time[cp_time_xlat[i]];
 +		stats_all.s3.cp_time[i] = bsd_cp_time[cp_time_xlat[i]];
  
          (void)getloadavg(avrun, sizeof(avrun) / sizeof(avrun[0]));
  
 -	stats_all.s2.avenrun[0] = avrun[0] * FSCALE;
 -	stats_all.s2.avenrun[1] = avrun[1] * FSCALE;
 -	stats_all.s2.avenrun[2] = avrun[2] * FSCALE;
 +	stats_all.s3.avenrun[0] = avrun[0] * FSCALE;
 +	stats_all.s3.avenrun[1] = avrun[1] * FSCALE;
 +	stats_all.s3.avenrun[2] = avrun[2] * FSCALE;
  
  	mib[0] = CTL_KERN;
  	mib[1] = KERN_BOOTTIME;
 @@ -221,13 +224,13 @@
  		exit(1);
  	}
  
 -	stats_all.s2.boottime.tv_sec = btm.tv_sec;
 -	stats_all.s2.boottime.tv_usec = btm.tv_usec;
 +	stats_all.s3.boottime.tv_sec = btm.tv_sec;
 +	stats_all.s3.boottime.tv_usec = btm.tv_usec;
  
  
  #ifdef DEBUG
 -	fprintf(stderr, "%d %d %d %d\n", stats_all.s1.cp_time[0],
 -	    stats_all.s1.cp_time[1], stats_all.s1.cp_time[2], stats_all.s1.cp_time[3]);
 +	fprintf(stderr, "%d %d %d %d\n", stats_all.s3.cp_time[0],
 +	    stats_all.s3.cp_time[1], stats_all.s3.cp_time[2], stats_all.s3.cp_time[3]);
  #endif
  
  #define	FETCH_CNT(stat, cnt) do {					\
 @@ -238,12 +241,12 @@
  	}								\
  } while (0)
  
 -	FETCH_CNT(stats_all.s1.v_pgpgin, vm.v_vnodepgsin);
 -	FETCH_CNT(stats_all.s1.v_pgpgout, vm.v_vnodepgsout);
 -	FETCH_CNT(stats_all.s1.v_pswpin, vm.v_swappgsin);
 -	FETCH_CNT(stats_all.s1.v_pswpout, vm.v_swappgsout);
 -	FETCH_CNT(stats_all.s1.v_intr, sys.v_intr);
 -	FETCH_CNT(stats_all.s2.v_swtch, sys.v_swtch);
 +	FETCH_CNT(stats_all.s3.v_pgpgin, vm.v_vnodepgsin);
 +	FETCH_CNT(stats_all.s3.v_pgpgout, vm.v_vnodepgsout);
 +	FETCH_CNT(stats_all.s3.v_pswpin, vm.v_swappgsin);
 +	FETCH_CNT(stats_all.s3.v_pswpout, vm.v_swappgsout);
 +	FETCH_CNT(stats_all.s3.v_intr, sys.v_intr);
 +	FETCH_CNT(stats_all.s3.v_swtch, sys.v_swtch);
  	gettimeofday(&tm, (struct timezone *) 0);
  	stats_all.s1.v_intr -= hz*(tm.tv_sec - btm.tv_sec) +
  	    hz*(tm.tv_usec - btm.tv_usec)/1000000;
 @@ -262,11 +265,11 @@
  		exit(1);
  	}
  
 -	stats_all.s1.if_ipackets = 0;
 -	stats_all.s1.if_opackets = 0;
 -	stats_all.s1.if_ierrors = 0;
 -	stats_all.s1.if_oerrors = 0;
 -	stats_all.s1.if_collisions = 0;
 +	stats_all.s3.if_ipackets = 0;
 +	stats_all.s3.if_opackets = 0;
 +	stats_all.s3.if_ierrors = 0;
 +	stats_all.s3.if_oerrors = 0;
 +	stats_all.s3.if_collisions = 0;
  	for (i = 1; i <= ifcount; i++) {
  		len = sizeof ifmd;
  		mib[3] = IFMIB_IFDATA;
 @@ -281,14 +284,15 @@
  			exit(1);
  		}
  
 -		stats_all.s1.if_ipackets += ifmd.ifmd_data.ifi_ipackets;
 -		stats_all.s1.if_opackets += ifmd.ifmd_data.ifi_opackets;
 -		stats_all.s1.if_ierrors += ifmd.ifmd_data.ifi_ierrors;
 -		stats_all.s1.if_oerrors += ifmd.ifmd_data.ifi_oerrors;
 -		stats_all.s1.if_collisions += ifmd.ifmd_data.ifi_collisions;
 -	}
 -	gettimeofday((struct timeval *)&stats_all.s3.curtime,
 -		(struct timezone *) 0);
 +		stats_all.s3.if_ipackets += ifmd.ifmd_data.ifi_ipackets;
 +		stats_all.s3.if_opackets += ifmd.ifmd_data.ifi_opackets;
 +		stats_all.s3.if_ierrors += ifmd.ifmd_data.ifi_ierrors;
 +		stats_all.s3.if_oerrors += ifmd.ifmd_data.ifi_oerrors;
 +		stats_all.s3.if_collisions += ifmd.ifmd_data.ifi_collisions;
 +	}
 +	gettimeofday(&newcurtime, (struct timezone *) NULL);
 +	stats_all.s3.curtime.tv_sec = newcurtime.tv_sec;
 +	stats_all.s3.curtime.tv_usec = newcurtime.tv_usec;
  	alarm(1);
  }
  
 
 --vkogqOf2sHV7VnPd--


More information about the freebsd-bugs mailing list