[collectd] int overflow: patch for irq plugin

Tomasz Pala gotar at polanet.pl
Sat Apr 18 17:45:01 CEST 2009


Hello,

attached patch fixes accounting of most frequent interrupts (like NICs
on routers). E.g. in my case:

213:      76266      76357      76250      76397 2408617852 2411844062 2411642538 2411814531   PCI-MSI-edge      eth1
214: 2621368360 2621463385 2621343444 2621386931    2349184         28         35         32   PCI-MSI-edge      eth0

Here LONG_MAX (2147483647L) overflows in 10 days uptime and strtol()
returns the same value.

As all the values (including counter_t) are unsigned long long int, the
fix is trivial (for now there's no need to check for irq_value overflow;>).

-- 
Tomasz Pala <gotar at pld-linux.org>
-------------- next part --------------
--- irq.c.orig	2009-03-17 14:47:15.000000000 +0100
+++ irq.c	2009-04-18 17:11:44.000000000 +0200
@@ -151,8 +151,8 @@
 	FILE *fh;
 	char buffer[BUFSIZE];
 	unsigned int irq;
-	unsigned int irq_value;
-	long value;
+	unsigned long long irq_value;
+	unsigned long long value;
 	char *endptr;
 	int i;
 
@@ -182,7 +182,7 @@
 		for (i = 1; i < fields_num; i++)
 		{
 			errno = 0;
-			value = strtol (fields[i], &endptr, 10);
+			value = strtoull (fields[i], &endptr, 10);
 
 			if ((*endptr != '\0') || (errno != 0))
 				break;


More information about the collectd mailing list