netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=702f6506030c618c289ab316e667111de695702c

commit 702f6506030c618c289ab316e667111de695702c
Author: Alastair Poole <[email protected]>
Date:   Sun Jun 7 12:57:27 2020 +0100

    freebsd: include zfs abomination if in use.
---
 src/bin/system/disks.c   | 27 +++++++++++++++++++++++++++
 src/bin/system/disks.h   |  3 +++
 src/bin/system/machine.c |  9 +++++++--
 src/bin/system/machine.h |  2 ++
 src/bin/ui/ui.c          |  5 +++++
 src/bin/ui/ui.h          |  2 ++
 src/bin/ui/ui_disk.c     |  6 ++++++
 src/bin/ui/ui_disk.h     |  1 +
 src/bin/ui/ui_memory.c   |  3 +++
 9 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/src/bin/system/disks.c b/src/bin/system/disks.c
index 71346b1..832a519 100644
--- a/src/bin/system/disks.c
+++ b/src/bin/system/disks.c
@@ -121,6 +121,32 @@ _cmp_cb(const void *p1, const void *p2)
    return strcmp(s1, s2);
 }
 
+Eina_Bool
+disk_zfs_mounted_get(void)
+{
+   Eina_List *disks;
+   char *path;
+   Eina_Bool zfs_mounted = EINA_FALSE;
+
+   disks = disks_get();
+   EINA_LIST_FREE(disks, path)
+     {
+        File_System *fs = disk_mount_file_system_get(path);
+        if (fs)
+          {
+             if (fs->type == 0x2FC12FC1)
+               zfs_mounted = EINA_TRUE;
+
+             disk_mount_file_system_free(fs);
+          }
+        free(path);
+     }
+   if (disks)
+     eina_list_free(disks);
+
+   return zfs_mounted;
+}
+
 Eina_List *
 disks_get(void)
 {
@@ -170,6 +196,7 @@ disks_get(void)
    list = eina_list_sort(list, eina_list_count(list), _cmp_cb);
 
    return list;
+
 #elif defined(__OpenBSD__) || defined(__NetBSD__)
    static const int mib[] = { CTL_HW, HW_DISKNAMES };
    static const unsigned int miblen = 2;
diff --git a/src/bin/system/disks.h b/src/bin/system/disks.h
index 0aec7f0..0d8ad19 100644
--- a/src/bin/system/disks.h
+++ b/src/bin/system/disks.h
@@ -16,6 +16,9 @@ typedef struct _File_System {
    Disk_Usage   usage;
 } File_System;
 
+Eina_Bool
+disk_zfs_mounted_get(void);
+
 File_System *
 disk_mount_file_system_get(const char *path);
 
diff --git a/src/bin/system/machine.c b/src/bin/system/machine.c
index 8630490..74327f6 100644
--- a/src/bin/system/machine.c
+++ b/src/bin/system/machine.c
@@ -493,10 +493,10 @@ _memory_usage_get(meminfo_t *memory)
    fclose(f);
 #elif defined(__FreeBSD__) || defined(__DragonFly__)
    unsigned int free = 0, active = 0, inactive = 0, wired = 0;
-   unsigned int cached = 0, buffered = 0;
+   unsigned int cached = 0, buffered = 0, zfs_arc = 0;
    long int result = 0;
    int page_size = getpagesize();
-   int mib[4] = { CTL_HW, HW_PHYSMEM, 0, 0 };
+   int mib[5] = { CTL_HW, HW_PHYSMEM, 0, 0, 0 };
 
    len = sizeof(memory->total);
    if (sysctl(mib, 2, &memory->total, &len, NULL, 0) == -1)
@@ -530,6 +530,11 @@ _memory_usage_get(meminfo_t *memory)
    miblen = 3;
    if (sysctlnametomib("vm.swap_info", mib, &miblen) == -1) return;
 
+   if ((zfs_arc = _sysctlfromname("kstat.zfs.misc.arcstats.c", mib, 5, &len)) 
!= -1)
+     {
+        memory->zfs_arc_used = zfs_arc;
+     }
+
    struct xswdev xsw;
    /* previous mib is important for this one... */
 
diff --git a/src/bin/system/machine.h b/src/bin/system/machine.h
index e218978..126dcdf 100644
--- a/src/bin/system/machine.h
+++ b/src/bin/system/machine.h
@@ -20,6 +20,8 @@ typedef struct
    unsigned long shared;
    unsigned long swap_total;
    unsigned long swap_used;
+
+   unsigned long zfs_arc_used;
 } meminfo_t;
 
 #define MAX_BATTERIES 10
diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c
index 95d3e7d..c44a750 100644
--- a/src/bin/ui/ui.c
+++ b/src/bin/ui/ui.c
@@ -1628,6 +1628,9 @@ _sys_info_all_poll_feedback_cb(void *data, Ecore_Thread 
*thread, void *msg)
 
    elm_progressbar_value_set(ui->progress_cpu, cpu_usage / 100);
 
+   if (ui->zfs_mounted)
+     sysinfo->memory.used += sysinfo->memory.zfs_arc_used;
+
    progress = ui->progress_mem;
    ratio = sysinfo->memory.total / 100.0;
    value = sysinfo->memory.used / ratio;
@@ -1679,6 +1682,8 @@ _ui_init(Evas_Object *parent)
    ui->cpu_times = NULL;
    ui->cpu_list = NULL;
 
+   ui->zfs_mounted = disk_zfs_mounted_get();
+
    _ui = NULL;
    _evisum_config = NULL;
 
diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h
index 058a190..0313ad1 100644
--- a/src/bin/ui/ui.h
+++ b/src/bin/ui/ui.h
@@ -107,6 +107,8 @@ typedef struct Ui
    Eina_Bool       sort_reverse;
    Eina_Bool       show_self;
 
+   Eina_Bool       zfs_mounted;
+
    uint64_t        incoming_max;
    uint64_t        outgoing_max;
 } Ui;
diff --git a/src/bin/ui/ui_disk.c b/src/bin/ui/ui_disk.c
index 77cfbfa..31f0c22 100644
--- a/src/bin/ui/ui_disk.c
+++ b/src/bin/ui/ui_disk.c
@@ -91,6 +91,7 @@ ui_tab_disk_update(Ui *ui)
 {
    Eina_List *disks;
    char *path;
+   Eina_Bool zfs_mounted = EINA_FALSE;
 
    if (!ui->disk_visible)
      return;
@@ -103,6 +104,9 @@ ui_tab_disk_update(Ui *ui)
         File_System *fs = disk_mount_file_system_get(path);
         if (fs)
           {
+             if (fs->type == 0x2FC12FC1)
+               zfs_mounted = EINA_TRUE;
+
              _ui_disk_add(ui, fs->path, fs->mount, fs->usage.total, 
fs->usage.used);
              disk_mount_file_system_free(fs);
           }
@@ -110,5 +114,7 @@ ui_tab_disk_update(Ui *ui)
      }
    if (disks)
      eina_list_free(disks);
+
+   if (!zfs_mounted) ui->zfs_mounted = EINA_FALSE;
 }
 
diff --git a/src/bin/ui/ui_disk.h b/src/bin/ui/ui_disk.h
index c28e632..3b6de39 100644
--- a/src/bin/ui/ui_disk.h
+++ b/src/bin/ui/ui_disk.h
@@ -2,6 +2,7 @@
 #define __UI_DISK_H__
 
 #include "ui.h"
+#include "system/disks.h"
 
 void
 ui_tab_disk_add(Ui *ui);
diff --git a/src/bin/ui/ui_memory.c b/src/bin/ui/ui_memory.c
index dcd65b2..8c5f6fe 100644
--- a/src/bin/ui/ui_memory.c
+++ b/src/bin/ui/ui_memory.c
@@ -136,6 +136,9 @@ ui_tab_memory_update(Ui *ui, Sys_Info *sysinfo)
    if (!ui->mem_visible)
      return;
 
+   if (ui->zfs_mounted)
+     sysinfo->memory.used += sysinfo->memory.zfs_arc_used;
+
    progress = ui->progress_mem_used;
    ratio = sysinfo->memory.total / 100.0;
    value = sysinfo->memory.used / ratio;

-- 


Reply via email to