Merge branch 'collectd-4.5' into collectd-4.6
[collectd.git] / src / swap.c
index 425742e..ca3b5ef 100644 (file)
@@ -289,7 +289,7 @@ static int swap_read (void)
        }
 
        status = swapctl (SWAP_STATS, swap_entries, swap_num);
-       if (status != swap_entries)
+       if (status != swap_num)
        {
                ERROR ("swap plugin: swapctl (SWAP_STATS) failed with status %i.",
                                status);
@@ -298,18 +298,28 @@ static int swap_read (void)
        }
 
 #if defined(DEV_BSIZE) && (DEV_BSIZE > 0)
-# define C_SWAP_BLOCK_SIZE DEV_BSIZE
+# define C_SWAP_BLOCK_SIZE ((uint64_t) DEV_BSIZE)
 #else
-# define C_SWAP_BLOCK_SIZE 512
+# define C_SWAP_BLOCK_SIZE ((uint64_t) 512)
 #endif
 
-       for (i = 0; i < swap_entries; i++)
+       for (i = 0; i < swap_num; i++)
        {
                if ((swap_entries[i].se_flags & SWF_ENABLE) == 0)
                        continue;
 
-               used = swap_entries[i].se_inuse  * C_SWAP_BLOCK_SIZE;
-               total = swap_entries[i].se_nblks * C_SWAP_BLOCK_SIZE;
+               used  += ((uint64_t) swap_entries[i].se_inuse)
+                       * C_SWAP_BLOCK_SIZE;
+               total += ((uint64_t) swap_entries[i].se_nblks)
+                       * C_SWAP_BLOCK_SIZE;
+       }
+
+       if (total < used)
+       {
+               ERROR ("swap plugin: Total swap space (%"PRIu64") "
+                               "is less than used swap space (%"PRIu64").",
+                               total, used);
+               return (-1);
        }
 
        swap_submit ("used", (gauge_t) used);