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

From: "G. Paul Ziemba" <[email protected]>
To: [email protected], [email protected]
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--
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to