svn commit: r249271 - stable/9/usr.sbin/bsnmpd/modules/snmp_hostres
Mikolaj Golub
trociny at FreeBSD.org
Mon Apr 8 19:48:40 UTC 2013
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;
More information about the svn-src-stable-9
mailing list