Date: Sun, 14 Apr 2013 09:00:01 GMT From: "G. Paul Ziemba" <p-fbsd-bugs@ziemba.us> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/92412: [libexec] [patch] rpc.rstatd reports bogus packets/per/second info Message-ID: <201304140900.r3E9012V015221@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/92412; it has been noted by GNATS. From: "G. Paul Ziemba" <p-fbsd-bugs@ziemba.us> To: bug-followup@FreeBSD.org, hostmaster@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--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304140900.r3E9012V015221>