- swap_resv = pagesize * ai.ani_resv;
- swap_alloc = pagesize * (MAX(ai.ani_resv, ai.ani_max) - ai.ani_free);
- swap_avail = pagesize * (MAX(ai.ani_max - ai.ani_resv, 0) + (availrmem - swapfs_minfree));
- /* swap_free = pagesize * (ai.ani_free + (availrmem - swapfs_minfree)); */
+ swap_alloc = ai.ani_max - ai.ani_free;
+ swap_alloc *= pagesize;
+ swap_resv = ai.ani_resv + ai.ani_free - ai.ani_max;
+ swap_resv *= pagesize;
+ swap_avail = ai.ani_max - ai.ani_resv;
+ swap_avail *= pagesize;
+
+ swap_submit ("used", swap_alloc);
+ swap_submit ("free", swap_avail);
+ swap_submit ("reserved", swap_resv - swap_alloc);
+/* #endif HAVE_LIBKSTAT */
+
+#elif defined(VM_SWAPUSAGE)
+ int mib[3];
+ size_t mib_len;
+ struct xsw_usage sw_usage;
+ size_t sw_usage_len;
+
+ mib_len = 2;
+ mib[0] = CTL_VM;
+ mib[1] = VM_SWAPUSAGE;
+
+ sw_usage_len = sizeof (struct xsw_usage);
+
+ if (sysctl (mib, mib_len, &sw_usage, &sw_usage_len, NULL, 0) != 0)
+ return (-1);
+
+ /* The returned values are bytes. */
+ swap_submit ("used", sw_usage.xsu_used);
+ swap_submit ("free", sw_usage.xsu_avail);
+/* #endif VM_SWAPUSAGE */