Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Apr 2013 19:48:40 +0000 (UTC)
From:      Mikolaj Golub <trociny@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r249271 - stable/9/usr.sbin/bsnmpd/modules/snmp_hostres
Message-ID:  <201304081948.r38JmeuU097886@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trociny
Date: Mon Apr  8 19:48:40 2013
New Revision: 249271
URL: http://svnweb.freebsd.org/changeset/base/249271

Log:
  MFC r248707:
  
  hrStorageSize and hrStorageUsed are 32 bit integers, reporting a fs
  size and usage in hrStorageAllocationUnits. If the file system has
  more than 2^31 allocations it can not be shown correctly and the
  meters are useless.
  
  In such cases follow net-snmp behaviour and increase
  hrStorageAllocationUnits so the values fit under INT_MAX.
  
  PR:		bin/177183
  Submitted by:	Eugene Grosbein egrosbein rdtc.ru

Modified:
  stable/9/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_storage_tbl.c
Directory Properties:
  stable/9/usr.sbin/bsnmpd/   (props changed)
  stable/9/usr.sbin/bsnmpd/modules/snmp_hostres/   (props changed)

Modified: stable/9/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_storage_tbl.c
==============================================================================
--- stable/9/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_storage_tbl.c	Mon Apr  8 19:44:57 2013	(r249270)
+++ stable/9/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_storage_tbl.c	Mon Apr  8 19:48:40 2013	(r249271)
@@ -442,10 +442,9 @@ static void
 storage_OS_get_fs(void)
 {
 	struct storage_entry *entry;
-	uint64_t used_blocks_count = 0;
+	uint64_t size, used;
+	int i, mounted_fs_count, units;
 	char fs_string[SE_DESC_MLEN];
-	int mounted_fs_count;
-	int i = 0;
 
 	if ((mounted_fs_count = getfsstat(NULL, 0, MNT_NOWAIT)) < 0) {
 		syslog(LOG_ERR, "hrStorageTable: getfsstat() failed: %m");
@@ -488,22 +487,17 @@ storage_OS_get_fs(void)
 		entry->flags |= HR_STORAGE_FOUND;
 		entry->type = fs_get_type(&fs_buf[i]); /*XXX - This is wrong*/
 
-		if (fs_buf[i].f_bsize > INT_MAX)
-			entry->allocationUnits = INT_MAX;
-		else
-			entry->allocationUnits = fs_buf[i].f_bsize;
-
-		if (fs_buf[i].f_blocks > INT_MAX)
-			entry->size = INT_MAX;
-		else
-			entry->size = fs_buf[i].f_blocks;
-
-		used_blocks_count = fs_buf[i].f_blocks - fs_buf[i].f_bfree;
-
-		if (used_blocks_count > INT_MAX)
-			entry->used = INT_MAX;
-		else
-			entry->used = used_blocks_count;
+		units = fs_buf[i].f_bsize;
+		size = fs_buf[i].f_blocks;
+		used = fs_buf[i].f_blocks - fs_buf[i].f_bfree;
+		while (size > INT_MAX) {
+			units <<= 1;
+			size >>= 1;
+			used >>= 1;
+		}
+		entry->allocationUnits = units;
+		entry->size = size;
+		entry->used = used;
 
 		entry->allocationFailures = 0;
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304081948.r38JmeuU097886>