kern/92412: [libexec] [patch] rpc.rstatd reports bogus
packets-per-second info
hotlips Internet admin
hostmaster at GTS.Infra-service.CA
Tue Jul 8 16:50:04 UTC 2008
The following reply was made to PR kern/92412; it has been noted by GNATS.
From: hotlips Internet admin <hostmaster at GTS.Infra-service.CA>
To: bug-followup at FreeBSD.org
Cc: jhb at freebsd.org
Subject: Re: kern/92412: [libexec] [patch] rpc.rstatd reports bogus
packets-per-second info
Date: Tue, 8 Jul 2008 12:33:34 -0400 (EDT)
Recently kern/122875 bug report provoked a change to libexec/rpc.rstatd
(rather than a still-needed fix to sys/kern/kern_clock.c for RELENG_7 & HEAD) -
Below is an updated patch to re-establish the required fixes
so that it works properly...
Bruce Becker +1 416 410 0879
GTS Network Administration Toronto, Ont.
Email: hostmaster at GTS.Infra-service.CA
--------- 8< --------- 8< --------- 8< --------- 8< --------- 8< ---------
--- rstat_proc.c.2008062600 2008-06-26 22:20:37.000000000 -0400
+++ rstat_proc.c.2008070600 2008-07-06 15:36:25.000000000 -0400
@@ -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);
}
@@ -205,13 +207,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 +223,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 +240,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 +264,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,11 +283,11 @@
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;
+ 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((struct timeval *)&stats_all.s3.curtime,
(struct timezone *) 0);
More information about the freebsd-bugs
mailing list