components/net-snmp/patches/056.15372155.hr_storage.patch
author Sowrabha H G<sowrabha.hg@oracle.com>
Thu, 26 Nov 2015 21:27:25 -0800
branchs11u3-sru
changeset 5132 048ccb1a7e2c
permissions -rw-r--r--
15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5132
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     1
This patch fixes an issue where snmpdf was not returning the 
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     2
correct total disk size and available disk size when the size 
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     3
of the filesystem is larger than 1TB.This bug is already fixed 
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     4
in the community and the fix is available from the net-snmp 
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     5
version 5.6 onwards.The fix here slightly differs from the community 
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     6
since the patch in the community is applied on net-snmp version 5.6 .
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     7
This patch is taken from the below link.
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     8
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
     9
https://bugs.launchpad.net/ubuntu/+source/net-snmp/+bug/865268
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    10
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    11
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    12
--- net-snmp-5.4.1/agent/mibgroup/host/hr_storage.c	Thu May 21 23:47:45 2015
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    13
+++ net-snmp-5.4.1/agent/mibgroup/host/hr_storage.c	Thu May 21 23:55:59 2015
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    14
@@ -505,6 +505,7 @@
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    15
             int exact, size_t * var_len, WriteMethod ** write_method)
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    16
 {
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    17
     int             store_idx = 0;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    18
+    int             factor = 0;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    19
     static char     string[1024];
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    20
     struct HRFS_statfs stat_buf;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    21
     void                *ptr;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    22
@@ -537,9 +538,14 @@
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    23
 	    mem = (netsnmp_memory_info*)ptr;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    24
         }
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    25
     }
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    26
+/* Scaling factor for large filesystems */
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    27
+    if (store_idx > NETSNMP_MEM_TYPE_MAX) {
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    28
+        unsigned long long tmp = stat_buf.f_blocks;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    29
+        while (tmp > 0x7fffffff)
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    30
+            tmp >>= 1, factor++;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    31
+    }
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    32
 
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    33
 
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    34
-
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    35
     switch (vp->magic) {
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    36
     case HRSTORE_MEMSIZE:
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    37
         netsnmp_memory_load();
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    38
@@ -593,9 +599,9 @@
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    39
     case HRSTORE_UNITS:
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    40
         if (store_idx > NETSNMP_MEM_TYPE_MAX)
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    41
 #if HRFS_HAS_FRSIZE
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    42
-            long_return = stat_buf.f_frsize;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    43
+            long_return = stat_buf.f_frsize << factor;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    44
 #else
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    45
-            long_return = stat_buf.f_bsize;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    46
+            long_return = stat_buf.f_bsize << factor;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    47
 #endif
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    48
         else {
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    49
             if ( !mem || mem->units == -1 )
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    50
@@ -605,7 +611,7 @@
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    51
         return (u_char *) & long_return;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    52
     case HRSTORE_SIZE:
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    53
         if (store_idx > NETSNMP_MEM_TYPE_MAX)
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    54
-            long_return = stat_buf.f_blocks;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    55
+            long_return = stat_buf.f_blocks >> factor;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    56
         else {
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    57
             if ( !mem || mem->size == -1 )
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    58
                 goto try_next;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    59
@@ -614,7 +620,7 @@
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    60
         return (u_char *) & long_return;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    61
     case HRSTORE_USED:
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    62
         if (store_idx > NETSNMP_MEM_TYPE_MAX)
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    63
-            long_return = (stat_buf.f_blocks - stat_buf.f_bfree);
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    64
+            long_return = (stat_buf.f_blocks - stat_buf.f_bfree) >> factor;
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    65
         else {
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    66
             if ( !mem || mem->size == -1 || mem->free == -1 )
048ccb1a7e2c 15372155 SUNBT6513126 SNMP monitoring large(>1Tb) ZFS filesystem reports faulty disk size
Sowrabha H G<sowrabha.hg@oracle.com>
parents:
diff changeset
    67
                 goto try_next;