From 702f6506030c618c289ab316e667111de695702c Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Sun, 7 Jun 2020 12:57:27 +0100 Subject: [PATCH] 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;