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